如何修复必须在存储过程中声明的标识符?

unn*_*nan 5 mysql sql-server oracle stored-procedures

我正在创建一个过程,然后在 SQL plus 中执行它。该过程已正确创建/更新,您可以从以下代码中看到。

SQL> create or replace procedure add_sal(i_empno number, addsal out number)
 2  is
 3  begin
 4  select sal+1000
 5  into addsal
 6  from emp
 7  where empno=i_empno;
 8  end;
 9  /

Procedure created.
Run Code Online (Sandbox Code Playgroud)

当我尝试执行该过程时,我收到一个我不明白的错误。

SQL> exec add_sal(i_empno,addsal);
BEGIN add_sal(i_empno,addsal); END;
              *
ERROR at line 1:
ORA-06550: line 1, column 15:
PLS-00201: identifier 'I_EMPNO' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

小智 0

i_empnoexec语句中使用,您必须在之前定义它:

VARIABLE i_empno NUMBER
VARIABLE addsal NUMBER
BEGIN
 :i_empno:=4;
END;
/
exec add_sal(:i_empno,:addsal);
Run Code Online (Sandbox Code Playgroud)

或者你需要传递一些值:

VARIABLE addsal NUMBER
exec add_sal(1,:addsal);
Run Code Online (Sandbox Code Playgroud)