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?
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.
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
). .