web-dev-qa-db-fra.com

Quand ou pourquoi utiliser un "SET DEFINE OFF" dans la base de données Oracle

Je regarde un script dans Oracle et je vois quelque chose que je ne reconnais pas

REM INSERTING into database1."Users"
 SET DEFINE OFF;
Insert into database1."Users" ("id","right") values ('1','R');

Je cherche une documentation sur "set define off" et il écrit littéralement "désactive l'analyse des commandes pour remplacer la variable de substitution par leurs valeurs"

Je ne comprends pas vraiment ce qu'ils veulent dire.

Quelqu'un peut-il m'aider?

55

Par défaut, SQL Plus considère '&' comme un caractère spécial qui commence une chaîne de substitution. Cela peut poser des problèmes lors de l’exécution de scripts incluant notamment '&' pour d’autres raisons:

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

Si vous savez que votre script inclut (ou peut inclure) des données contenant des caractères '&' et que vous ne souhaitez pas le comportement de substitution décrit ci-dessus, utilisez set define off pour désactiver le comportement lors de l'exécution du script:

SQL> set define off
SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd');

1 row created.

SQL> select customer_name from customers;

CUSTOMER_NAME
------------------------------
Marks & Spencers Ltd

Vous voudrez peut-être ajouter set define on à la fin du script pour restaurer le comportement par défaut.

90
Tony Andrews

Voici l'exemple:

SQL> set define off;
SQL> select * from dual where dummy='&var';

no rows selected

SQL> set define on
SQL> /
Enter value for var: X
old   1: select * from dual where dummy='&var'
new   1: select * from dual where dummy='X'

D
-
X

Avec set define off, il prenait une ligne avec la valeur &var, invitait un utilisateur à saisir une valeur et remplaçait &var par la valeur entrée (dans ce cas, X). .

11