我有一个试图通过sqlplus运行的脚本。在脚本的顶部,我设置了"SET DEFINE OFF“。然而,当我运行它时,我收到了这个错误:
SP2-0552:绑定变量"CHANDAWALA“未声明。
我相信这是因为我有几个update语句,它们在字符串中包含冒号,如下所示:
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上发布的问题对我没有帮助,因为那个人试图转义&符号来进行变量替换,而不是将冒号作为绑定变量。我正在寻找一种方法来告诉客户端忽略引用字符串中的任何内容(包括冒号)。
EDIT - as,所以听起来Oracle不应该将其解释为引号内的绑定变量。所以现在的问题是,它为什么要这么做?
发布于 2017-05-10 01:42:52
Set Define Off是一个SQLPlus命令,它可以防止SQLPlus将&视为特殊字符。&也是特定于SQLPlus的,在它之外没有任何意义。
当define为on时,SQLPlus用实际值替换替代变量,然后将其传递给Oracle SQL引擎。
另一方面,:是真正绑定变量,只有Oracle SQL引擎才能识别并查找要绑定的值。SQLPlus不会将:识别为绑定元字符,而是将其作为绑定元字符传递给SQL引擎。
发布于 2017-05-10 08:18:03
我不能复制你的问题。我创建了一个名为dually的表,其中包含一个单字符的列。当我尝试运行update语句时,不允许使用任何替换。
SQL> UPDATE brianl.dually
2 SET dummy = ':x';
SET dummy = ':x'
*
ERROR at line 2:
ORA-12899: value too large for column "BRIANL"."DUALLY"."DUMMY" (actual: 2,
maximum: 1)你有没有试过使用串联?
UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh' || ':' || Chandawala'https://stackoverflow.com/questions/43876365
复制相似问题