我正在看Oracle中的脚本,我看到了一些我不认识的东西
REM INSERTING into database1."Users"
SET DEFINE OFF;
Insert into database1."Users" ("id","right") values ('1','R');
Run Code Online (Sandbox Code Playgroud)
我正在寻找关于"set define off"的文档,它实际上是在写"禁用解释命令以用它们的值替换替换变量"
我真的不明白他们想说什么.
谁能帮我?
Ton*_*ews 94
默认情况下,SQL Plus将'&'视为开始替换字符串的特殊字符.运行由于其他原因而包含"&"的脚本时,这可能会导致问题:
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
Run Code Online (Sandbox Code Playgroud)
如果您知道您的脚本包含(或可能包含)包含'&'字符的数据,并且您不希望上述替换行为,那么请set define off在运行脚本时关闭该行为:
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
Run Code Online (Sandbox Code Playgroud)
您可能希望set define on在脚本末尾添加以恢复默认行为.
Dur*_*aju 11
这是一个例子:
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
Run Code Online (Sandbox Code Playgroud)
使用时set define off,它会占用一行&var值,提示用户为其输入值并替换&var为输入的值(在本例中为X).