web-dev-qa-db-de.com

Wann oder warum ein "SET DEFINE OFF" in der Oracle-Datenbank verwendet werden soll

Ich schaue mir ein Skript in Oracle an und sehe etwas, das ich nicht erkenne

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

Ich suche nach Dokumentation zu "set define off" und es heißt wörtlich "Deaktiviere das Parsen von Befehlen, um Substitutionsvariablen durch ihre Werte zu ersetzen".

Ich verstehe nicht wirklich, was sie sagen wollen.

Kann mir jemand helfen?

55

Standardmäßig behandelt SQL Plus '&' als Sonderzeichen, das eine Ersetzungszeichenfolge beginnt. Dies kann Probleme verursachen, wenn Skripte ausgeführt werden, die aus anderen Gründen '&' enthalten:

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

Wenn Sie wissen, dass Ihr Skript Daten enthält (oder enthalten kann), die '&' Zeichen enthalten, und Sie das oben beschriebene Ersetzungsverhalten nicht möchten, deaktivieren Sie das Verhalten mit set define off, Während Sie das Skript ausführen:

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

Möglicherweise möchten Sie am Ende des Skripts set define on Hinzufügen, um das Standardverhalten wiederherzustellen.

90
Tony Andrews

Hier ist das Beispiel:

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

Mit set define off Nahm es eine Zeile mit dem Wert &var In Anspruch, forderte einen Benutzer auf, einen Wert dafür einzugeben, und ersetzte &var Durch den eingegebenen Wert (in diesem Fall X).