When or Why to use a "SET DEFINE OFF" in Oracle Database When or Why to use a "SET DEFINE OFF" in Oracle Database oracle oracle

When or Why to use a "SET DEFINE OFF" in Oracle Database


By default, SQL Plus treats '&' as a special character that begins a substitution string. This can cause problems when running scripts that happen to include '&' for other reasons:

SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd');Enter value for spencers: old   1: insert into customers (customer_name) values ('Marks & Spencers Ltd')new   1: insert into customers (customer_name) values ('Marks  Ltd')1 row created.SQL> select customer_name from customers;CUSTOMER_NAME------------------------------Marks  Ltd

If you know your script includes (or may include) data containing '&' characters, and you do not want the substitution behaviour as above, then use set define off to switch off the behaviour while running the script:

SQL> set define offSQL> insert into customers (customer_name) values ('Marks & Spencers Ltd');1 row created.SQL> select customer_name from customers;CUSTOMER_NAME------------------------------Marks & Spencers Ltd

You might want to add set define on at the end of the script to restore the default behaviour.


Here is the example:

SQL> set define off;SQL> select * from dual where dummy='&var';no rows selectedSQL> set define onSQL> /Enter value for var: Xold   1: select * from dual where dummy='&var'new   1: select * from dual where dummy='X'D-X

With set define off, it took a row with &var value, prompted a user to enter a value for it and replaced &var with the entered value (in this case, X).