当前位置:首页 > 个人杂谈 > 正文内容

ORACLE编译时出现输入替换变量的解决方法

作者: 葛一速 | 日期: 2020-11-28 | 分类: 个人杂谈

今天,使用ORACLE编译存储过程时,出现异常情况,弹出“输入替代变量”的提示,这个SQL以往编译是无任何问题,这几天有有作修改,功能都已经测试OK,给到客户编译时,就出现如下提示:

ORACLE编译时出现输入替换变量的解决方法

网上搜索过,的确有类似的情况,也指出原因与解决方法,不过,并没有解决的我碰到的问题。

原因:

在SQL *PLUS执行语句时,如果执行的语句中出现了&符号,则会弹出替换变量输入框,要输入变量,可是本来的这个&符号就是普通的文本符,sql*plus还自动识别真是麻烦,所以要禁止这个自动识别变量的功能:

解决方法:

在执行语句前加一段set define off;申明关闭变量替代功能即可。

虽然,我的问题没有得到解决,但这里提到一个重点,那就是“&”这个符号,然后,我将之前能能编译的旧版的存储过程,再此基础上,将新的存储过程逐段拷贝编译,最终发现,果然是“&”这个符号引起的问题。

以下以简单例子说明一下:

1、出现的“输入替代变量”的例子

CREATE OR REPLACE PROCEDURE PROC_TEST
(
IN_CODE         IN  VARCHAR2,
OUT_HINT        OUT VARCHAR2
) AS
BEGIN
IF IN_CODE = ’1′ THEN
OUT_HINT := &0;
ELSE
OUT_HINT := ’100′;
END IF;
EXCEPTION
WHEN OTHERS THEN
BEGIN
OUT_HINT  := ‘异常错误:’||sqlerrm;
END;
END;

2、正确写法的例子:

CREATE OR REPLACE PROCEDURE PROC_TEST
(
IN_CODE         IN  VARCHAR2,
OUT_HINT        OUT VARCHAR2
) AS
BEGIN
IF IN_CODE = ’1′ THEN
OUT_HINT := ‘&’||’0′;
ELSE
OUT_HINT := ’100′;
END IF;
EXCEPTION
WHEN OTHERS THEN
BEGIN
OUT_HINT  := ‘异常错误:’||sqlerrm;
END;
END;

很明显,出现“输入替代变量”的例子是由于&0,我们看看前的截图的提示,正是提示“输入0的值”,可以看出ORACLE将&0看作是变量0,而修天方法很简单,将&与0使用||连接起来即可。

等等,别走! ^_^

好消息,快手官方发红包啦,登录即送2元,秒提现! 查看详情>>

  • 评论:(0)

已有 0 位网友发表了一针见血的评论,你还等什么?

◎欢迎大家参与讨论

站内搜索