我有一个脚本试图通过 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 会将带引号的字符串中的任何内容视为字符,而不解释其中的任何内容,包括感知的绑定变量。
显然不是这样的——那么在这种情况下,我该怎么办呢?我必须手动转义这些吗?
Thanks.
编辑 - 发布的问题何时或为何在 Oracle 数据库中使用“SET DEFINE OFF” https://stackoverflow.com/questions/34332639/when-or-why-to-use-a-set-define-off-in-oracle-database对我没有帮助,因为那个人试图转义&符号以进行变量替换,而不是冒号作为绑定变量。我正在寻找一种方法来告诉客户端忽略带引号的字符串中的任何内容(包括冒号)。
编辑 - 好吧,听起来 Oracle 不应该将其解释为引号内的绑定变量。那么现在的问题是,它为什么要这样做?
Set Define Off
是一个 SQLPlus 命令,它阻止 SQLPlus 处理&
作为一个特殊字符。&
也是特定于 SQLPlus 的,在它之外没有任何意义。
When define
is on
,SQLPlus用实际值替换替换变量,然后将其传递给Oracle SQL引擎。
另一方面,:
是真正的绑定变量,只有 Oracle SQL 引擎才能识别并查找要绑定的值。这:
SQLPlus 不会将它们识别为绑定元字符,并按原样传递给 SQL 引擎。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)