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