首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SET DEFINE OFF不适用于冒号(:)字符?

问为什么SET DEFINE OFF不适用于冒号(:)字符?
EN

Stack Overflow用户
提问于 2017-05-10 01:32:53
回答 2查看 6K关注 0票数 1

我有一个试图通过sqlplus运行的脚本。在脚本的顶部,我设置了"SET DEFINE OFF“。然而,当我运行它时,我收到了这个错误:

SP2-0552:绑定变量"CHANDAWALA“未声明。

我相信这是因为我有几个update语句,它们在字符串中包含冒号,如下所示:

代码语言:javascript
复制
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不应该将其解释为引号内的绑定变量。所以现在的问题是,它为什么要这么做?

EN

回答 2

Stack Overflow用户

发布于 2017-05-10 01:42:52

Set Define Off是一个SQLPlus命令,它可以防止SQLPlus将&视为特殊字符。&也是特定于SQLPlus的,在它之外没有任何意义。

当define为on时,SQLPlus用实际值替换替代变量,然后将其传递给Oracle SQL引擎。

另一方面,:是真正绑定变量,只有Oracle SQL引擎才能识别并查找要绑定的值。SQLPlus不会将:识别为绑定元字符,而是将其作为绑定元字符传递给SQL引擎。

票数 1
EN

Stack Overflow用户

发布于 2017-05-10 08:18:03

我不能复制你的问题。我创建了一个名为dually的表,其中包含一个单字符的列。当我尝试运行update语句时,不允许使用任何替换。

代码语言:javascript
复制
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)

你有没有试过使用串联?

代码语言:javascript
复制
UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh' || ':' || Chandawala'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43876365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档