I don't think you have to worry about the @ sign. In any case the "set var value" commands are only for sqlplus, not for SQL or PL/SQL.
If you're using the execute command, you're probably doing it from sqlplus, in which case if you had to worry about it like you did an &, you could just type set define off before you type execute, or put it in the script ahead of the execute commands.
however the @ shouldn't cause any problems.
this is without changing any sqlplus variables
SQL> insert into test values ('firstname.lastname@example.org');
I should have been more clear on this ..
Yes, it does work with worksheet or Sql* plus.
But not through ODBC for some reason.
If you use ODBC 32bit test, Oracle 8 and ODBC driver 8.00.57 or any other may be even 8.00.62.
It doesn't work.