何时或为何在 Oracle 数据库中使用“SET DEFINE OFF”
Posted
技术标签:
【中文标题】何时或为何在 Oracle 数据库中使用“SET DEFINE OFF”【英文标题】:When or Why to use a "SET DEFINE OFF" in Oracle Database 【发布时间】:2016-03-23 19:21:07 【问题描述】:我正在观看 Oracle 中的脚本,但我看到了一些我不认识的东西
REM INSERTING into database1."Users"
SET DEFINE OFF;
Insert into database1."Users" ("id","right") values ('1','R');
我正在寻找有关“设置定义关闭”的文档,它实际上是在写“禁用命令解析以用它们的值替换替换变量”
我真的不明白他们想说什么。
谁能帮帮我?
【问题讨论】:
关闭提示替换变量。所以当它看到你的替换变量时不会提示你插入一个值我相信默认是 &。 这是 SQL client 的设置,而不是数据库本身。因此它记录在 SQL*Plus 手册中:docs.oracle.com/cd/E11882_01/server.112/e16604/… 【参考方案1】:默认情况下,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
如果您知道您的脚本包含(或可能包含)包含“&”字符的数据,并且您不希望出现上述替换行为,则在运行脚本时使用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
您可能希望在脚本末尾添加set define on
以恢复默认行为。
【讨论】:
【参考方案2】:示例如下:
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
对于set define off
,它占用了一行&var
值,提示用户为其输入一个值并将&var
替换为输入的值(在本例中为X
)。
【讨论】:
以上是关于何时或为何在 Oracle 数据库中使用“SET DEFINE OFF”的主要内容,如果未能解决你的问题,请参考以下文章
在调用ReadAsStreamAsync时何时或何时调用HttpResponseMessage?
何时或如何将 QSqlTableModel 上的 fetchMore() 与 SQLite 数据库一起使用以使 rowCount() 工作?
asp.net mvc项目中,为何在iis6上显示404错误,是何原因造成