如何在从SQL Plus运行的SQL脚本中忽略“&”号?


104

我有一个SQL脚本,该脚本创建带有注释的包,其中包含与号(&)。当我从SQL Plus运行脚本时,系统会提示我输入以&开头的字符串的替代值。如何禁用此功能,以便SQL Plus忽略与号?

Answers:


181

这可能对您有用:

set define off

否则,“&”号必须位于字符串的末尾,

'StackOverflow &' || ' you'

编辑:保存时,我非常满意。。。这是从Blog引用的。


2
您还可以在glogin.sql站点配置文件设置文件或login.sql用户配置文件设置文件中指定此设置
David Aldridge

如果您对替换变量不感兴趣,这是最简单的解决方案。
Drumbeg 2015年

始终是一种救生解决方案:)谢谢。
Anjana Silva

25

如果您有时使用替换变量,则可能不想关闭定义。在这些情况下,您可以将&符号从等价的数字转换为,|| Chr(38) ||或将其附加为单个字符|| '&' ||


特定方案是一个包,其来源在注释中包含“&”号。我看不到如何使用串联或替代。
JoshL 2010年

JoshL,您是正确的,我出于完整性仅列出了这一点。即使没有直接回答您的特定问题,它也与您的问题有关。
Leigh Riffel 2010年

它实际上帮助了我。
Archimedes Trajano 2014年

13

我用下面的代码解决了:

set escape on

然后在左边的&旁边放一个\ 'value_\&_intert'

Att


这对我有用。我正在使用该命令,comment on column tablename.columnname is 'war ' || chr(38) || ' peace'但它给了我错误ORA-01780: string literal required
mrswadge 2015年

6

您可以使用以下命令将执行脚本时要查找的特殊字符设置为另一个值: 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>

1
我最近亲自使用了这种方法。我喜欢它,因为它不需要我更改PL / SQL包的内容。
Drumbeg 2015年

3

设置定义关闭<-这是我发现的最佳解决方案

我也尝试过...

设置定义

我能够插入包含“&”字符的多个记录,但无法在文本中使用“}”字符,因此我决定使用“ set define off”,一切都会正常进行。



0

我有一个CASE语句,其中WHEN column ='sometext&more text'THEN ....

我将其替换为WHEN column ='sometext'|| CHR(38)|| '更多文字'然后...

您还可以使用WHEN列,例如“ sometext _ more text”,然后...

(_是单个字符的通配符)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.