pl/sql 绑定错误

Posted

技术标签:

【中文标题】pl/sql 绑定错误【英文标题】:Pl/sql bad bind error 【发布时间】:2013-06-16 12:29:10 【问题描述】:

谁能帮我写下下面的代码:

    不知道为什么会报错 RETURN (salary > min_sal) & (salary <=Max sal) - 这些有效吗?

当我运行代码时,我得到一个PLS 00049 BAD BIND error

Create or REPLACE FUNCTION sal_ok(SALARY number, jobgrade NUMBER)
RETURN BOOLEAN AS
BEGIN
SELECT losal, hisal INTO :min_sal, :max_sal FROM salgrade
WHERE grade = jobgrade;
RETURN (salary >=min_sal) AND  (salary <=Max sal);
END sal_ok;
/

感谢您的帮助

【问题讨论】:

你想在这里返回什么? 在哪里声明了min_salmax_sal 【参考方案1】:

出现严重绑定错误的原因是您没有在函数中的任何位置声明 min_salmax_sal 变量。

照做

CREATE OR REPLACE FUNCTION sal_ok (salary NUMBER, jobgrade NUMBER)
    RETURN BOOLEAN
AS
min_sal number;
max_sal number;
BEGIN
    SELECT  losal, hisal
      INTO  min_sal, max_sal
      FROM  salgrade
     WHERE  grade = jobgrade;

    RETURN (salary >= min_sal) AND (salary <= max_sal); -- not sure about this line as   I am not sure what you would want to return
END sal_ok;
/

这将消除您的错误绑定错误。

关于你的 return 声明,我不确定你想从你的函数中返回什么。

【讨论】:

他要返回工资是否ok,所以最后二进制计算。我不记得 pl/sql 是否允许它,因为它现在在代码中。应该,但是我多次对这种语言中布尔值的一些巨大不足感到惊讶。如果是这样,只需将计算插入 sql 本身,然后将 .. 选择为 .. booleanvariable,然后返回变量。另一个好主意是返回一个数字,因为 boolean 不是 Oracle 原生 sql 类型,不能在 pl/sql 之外使用。 @Sebas yes boolean 有不能在 plsql 之外使用的限制。 OP 应该返回一个数字。

以上是关于pl/sql 绑定错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA - 06502:PL/SQL:数字或值错误:批量绑定:截断绑定

Oracle PL/SQL 用户输入错误“未声明绑定变量”

为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?

sqlplus pl/sql Date/Time 用户输入理解为绑定变量

PL/SQL 中的变量;总是绑定变量?

如何在pl/sql中执行绑定变量?