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
<font face="courier">
SQL> insert into test values ('[email protected]');

1 row created.

SQL> select * from test;

COL1
------------------------------

&testing
[email protected]

SQL>
</font>