【问题标题】:When or Why to use a "SET DEFINE OFF" in Oracle Database何时或为何在 Oracle 数据库中使用“SET DEFINE OFF”
【发布时间】: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/…

标签: oracle sqlplus


【解决方案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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多