如何忽略从 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 脚本中的 & 符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PowerShell 中运行 SQL Plus 脚本

如何通过 sql plus 从命令行发出单个命令?

PL/SQL 编译失败时如何让 SQL*Plus 退出

SQL*Plus 可以从运行它的机器上读取环境变量吗?

Shell 脚本中的 SQL* PLUS 连接问题

如何从 PL/SQL 有条件地退出 SQL Plus