何时或为何在 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错误,是何原因造成

oracle数据库创建表时,int型数据为何报错

在excel2003中 counta 统计非空单元格个数,为何不能正常统计,统计时把空单元格也一起统计了,不知何解?

Angular有何优势?为何备受程序猿喜爱?