gpt4 book ai didi

oracle - 为什么 SET DEFINE OFF 不适用于冒号 ( :) character?

转载 作者:行者123 更新时间:2023-12-05 05:20:57 27 4
gpt4 key购买 nike

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

SP2-0552:未声明绑定(bind)变量“CHANDAWALA”。

我相信这种情况正在发生,因为我有几个更新语句在字符串中包含冒号,如下所示:

UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh: Chandawala'...
UPDATE ADDRESS SET ADDRESS_STREET_LINE1 = 'Moh:chandawala'...

因此它将它们视为绑定(bind)变量。我的印象是 SET DEFINE OFF 会使它把引号字符串中的任何内容都视为字符,而不解释其中的任何内容,包括感知到的绑定(bind)变量。

这显然不是这种情况 - 那么在这种情况下,我应该怎么办?我必须手动转义这些吗?

谢谢。

编辑 - 在 When or Why to use a "SET DEFINE OFF" in Oracle Database 发布的问题对我没有帮助,因为那个人试图逃避变量替换的符号,而不是冒号作为绑定(bind)变量。我正在寻找一种方法来告诉客户忽略带引号的字符串中的任何内容(包括冒号)。

编辑 - 好的,听起来 Oracle 不应该将其解释为引号内的绑定(bind)变量。那么现在的问题是,它为什么要这样做?

最佳答案

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

defineon时,SQLPlus用实际值替换替换变量,然后将其传递给Oracle SQL引擎。

另一方面,: 是真正的绑定(bind)变量,只有 Oracle SQL 引擎才能识别并查找要绑定(bind)的值。 : 不被 SQLPlus 识别为绑定(bind)元字符,而是按原样传递给 SQL 引擎。

关于oracle - 为什么 SET DEFINE OFF 不适用于冒号 ( :) character?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com