如何忽略从 SQL Plus 运行的 SQL 脚本中的 & 符号?
Posted
技术标签:
【中文标题】如何忽略从 SQL Plus 运行的 SQL 脚本中的 & 符号?【英文标题】:How do I ignore ampersands in a SQL script running from SQL Plus? 【发布时间】:2010-09-12 04:52:57 【问题描述】:我有一个 SQL 脚本,它创建一个包,其中包含一个与号 (&) 的注释。当我从 SQL Plus 运行脚本时,系统会提示我输入以 & 开头的字符串的替代值。如何禁用此功能以使 SQL Plus 忽略与号?
【问题讨论】:
【参考方案1】:这可能对你有用:
set define off
否则&符号需要在字符串的末尾,
'*** &' || ' you'
编辑:保存时我很高兴...这是从 blog 引用的。
【讨论】:
您也可以在 glogin.sql 站点配置文件设置文件或 login.sql 用户配置文件设置文件中指定此项 如果您对替换变量不感兴趣,这是最简单的解决方案。 永远是救生解决方案 :) 谢谢。【参考方案2】:如果您有时使用替换变量,您可能不想关闭定义。在这些情况下,您可以将 & 符号从其等效数字转换为 || Chr(38) ||
中的值,或将其作为单个字符附加为 || '&' ||
中的值。
【讨论】:
具体场景是一个包,它的源在注释中包含一个&。我不知道如何使用连接或替换。 JoshL,你是对的,我只是为了完整性而列出了这个。它与您的问题有关,即使它没有直接回答您的具体问题。 它实际上帮助了我。【参考方案3】:我用下面的代码解决了:
set escape on
并在左侧的 & 旁边放一个 \ 'value_\&_intert'
攻击
【讨论】:
这对我有用。我正在使用命令comment on column tablename.columnname is 'war ' || chr(38) || ' peace'
,但它给了我错误ORA-01780: string literal required
。【参考方案4】:
您可以通过使用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>
【讨论】:
我最近自己也使用过这种方法。我喜欢它,因为它不需要我更改 PL/SQL 包的内容。【参考方案5】:set define off
我也试过了……
设置定义
我可以在文本中插入几条包含“&”字符的记录,但不能使用“”字符 所以我决定使用“set define off”,一切正常。
【讨论】:
【参考方案6】:根据this nice FAQ 有几个解决方案。
如果您可以修改评论,您还可以使用反斜杠字符 \
转义与号。
【讨论】:
反斜杠转义在 SQL*Plus 或 SQLDeveloper 中不起作用 @JimTough 在用set escape on
激活它之后会发生【参考方案7】:
我有一个 CASE 语句,其中 WHEN column = 'sometext & more text' THEN ....
我把它换成了 WHEN 列 = 'sometext' || CHR(38) || '更多文字' THEN ...
你也可以使用 WHEN 列 LIKE 'sometext _ more text' THEN ...
(_ 是单个字符的通配符)
【讨论】:
以上是关于如何忽略从 SQL Plus 运行的 SQL 脚本中的 & 符号?的主要内容,如果未能解决你的问题,请参考以下文章