【发布时间】:2010-09-12 04:52:57
【问题描述】:
我有一个 SQL 脚本,它创建一个包,其中包含一个与号 (&) 的注释。当我从 SQL Plus 运行脚本时,系统会提示我输入以 & 开头的字符串的替代值。如何禁用此功能以使 SQL Plus 忽略与号?
【问题讨论】:
我有一个 SQL 脚本,它创建一个包,其中包含一个与号 (&) 的注释。当我从 SQL Plus 运行脚本时,系统会提示我输入以 & 开头的字符串的替代值。如何禁用此功能以使 SQL Plus 忽略与号?
【问题讨论】:
【讨论】:
如果您有时使用替换变量,您可能不想关闭定义。在这些情况下,您可以将 & 符号从其等效数字转换为 || Chr(38) || 中的值,或将其作为单个字符附加为 || '&' || 中的值。
【讨论】:
我用下面的代码解决了:
set escape on
并在左侧的 & 旁边放一个 \ 'value_\&_intert'
攻击
【讨论】:
comment on column tablename.columnname is 'war ' || chr(38) || ' peace',但它给了我错误ORA-01780: string literal required。
您可以通过使用SET DEFINE <1_CHARACTER> 将执行脚本时查找的特殊字符设置为另一个值
默认情况下,DEFINE功能本身是开启的,并且设置为&
它可以被关闭 - 如前所述 - 但也可以通过将其设置为不同的值来避免它。非常清楚您将其设置为什么标志。在下面的示例中,我选择了 # 字符,但该选择只是一个示例。
SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value
'AVALUE#VAR_HASH'
-----------------
a value #var_hash
SQL> set define #
SQL> r
1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value
'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value
SQL>
【讨论】:
set define off
我也试过了……
设置定义 }
我可以在文本中插入几条包含“&”字符的记录,但不能使用“}”字符 所以我决定使用“set define off”,一切正常。
【讨论】:
根据this nice FAQ 有几个解决方案。
如果您可以修改评论,您还可以使用反斜杠字符 \ 转义与号。
【讨论】:
set escape on激活它之后会发生
我有一个 CASE 语句,其中 WHEN column = 'sometext & more text' THEN ....
我把它换成了 WHEN 列 = 'sometext' || CHR(38) || '更多文字' THEN ...
你也可以使用 WHEN 列 LIKE 'sometext _ more text' THEN ...
(_ 是单个字符的通配符)
【讨论】: