PLS-00049: 创建程序时绑定变量错误

PLS-00049: bad bind variable ' while creating procedure

您好,我正在尝试创建一个程序,其代码如下:

CREATE PROCEDURE profit_calcs(profit OUT NUMBER,
                              em     IN NUMBER,
                              eq     IN NUMBER,
                              p      IN NUMBER,
                              u      IN NUMBER,
                              income IN NUMBER,
                              ex     IN NUMBER) AS
BEGIN
  SELECT SUM(amount) INTO em FROM a_em;
  SELECT SUM(amount) INTO eq FROM a_eq;
  SELECT SUM(amount) INTO p FROM a_p;
  SELECT SUM(amount) INTO u FROM a_u;
  SELECT SUM(amount) INTO income FROM sales;
  ex     := :em + :eq + :p + :u;
  profit := :income - :ex;
END;
/

每当我尝试创建它时,我都会收到以下错误:

LINE/COL  ERROR
--------- -------------------------------------------------------------
10/7      PLS-00049: bad bind variable 'EM'
10/13     PLS-00049: bad bind variable 'EQ'
10/18     PLS-00049: bad bind variable 'P'
10/22     PLS-00049: bad bind variable 'U'
11/11     PLS-00049: bad bind variable 'INCOME'
11/21     PLS-00049: bad bind variable 'EX'

如果有人帮我解决这个错误,那将非常有帮助。

因为,你需要在关键字AS之后,BEGIN之前的声明部分定义那些变量,例如

CREATE OR REPLACE PROCEDURE profit_calcs(profit OUT NUMBER,
                                         ex     OUT NUMBER) AS
  em     INT;
  eq     INT;
  p      INT;
  u      INT;
  income INT;                             
BEGIN

将它们转换为此存储过程的OUT类型参数,例如

CREATE OR REPLACE PROCEDURE profit_calcs(profit OUT NUMBER,
                                         em     OUT NUMBER,
                                         eq     OUT NUMBER,
                                         p      OUT NUMBER,
                                         u      OUT NUMBER,
                                         income OUT NUMBER,
                                         ex     OUT NUMBER) AS                           
BEGIN

哪里

  • 不要忘记删除这些变量前面的冒号,例如 :em,:eq应该分别是em,eq
  • REPLACE CREATE PROCEDURE 命令的选项不应被省略 考虑即将到来的合集