【发布时间】:2017-10-08 03:37:49
【问题描述】:
我有一个试图通过 sqlplus 运行的脚本。在脚本的顶部,我设置了“SET DEFINE OFF”。但是,当我运行它时,我收到了这个错误:
SP2-0552:绑定变量“CHANDAWALA”未声明。
我相信这种情况正在发生,因为我有几个更新语句,它们在这样的字符串中包含冒号:
UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh: Chandawala'...
UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh:chandawala'...
所以它将它们视为绑定变量。我的印象是 SET DEFINE OFF 会使其将引用字符串中的任何内容视为字符,而不是解释其中的任何内容,包括感知的绑定变量。
显然不是这样 - 那么在这种情况下,我应该怎么做?我必须手动转义这些吗?
谢谢。
编辑-When or Why to use a "SET DEFINE OFF" in Oracle Database 上发布的问题对我没有帮助,因为该人试图逃避 & 符号以进行变量替换,而不是将冒号作为绑定变量。我正在寻找一种方法来告诉客户端忽略引用字符串中的任何内容(包括冒号)。
编辑-好的,听起来Oracle不应该将其解释为引号内的绑定变量。所以现在的问题是,它为什么要这样做?
【问题讨论】:
-
我看过那篇文章,但没有提到绑定变量和转义冒号。除非我错过了什么……
-
:chandawala用单引号括起来时不应被解释为绑定变量。 -
谢谢 - 那么我想问题是为什么它试图将其解释为绑定变量呢?事实上,我确实将它用单引号括起来。我在问题的代码块中粘贴的正是我的脚本的外观,脚本中没有其他地方有“chandawala”这个词。
-
您是否有可能使用了错误类型的引号 - 如果您有反引号或智能引号或其他东西(可能是从 Word 或类似内容中复制和粘贴查询),那么您会收到此错误。您发布的内容没有问题,但您是否从代码中复制或重新输入以进行发布?
-
如果语句本身运行良好,但不是作为较大脚本的一部分,则直接怀疑应该是脚本 REST 中的错误引用(在这些 UPDATE 语句之前)。很多时候,像 O'Meara 这样的名称的撇号没有正确转义的结果。