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

时间:2015-05-07 09:28:42

标签: 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.

当我尝试执行该程序时,我收到了一条我不理解的错误。

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

我哪里错了?

2 个答案:

答案 0 :(得分:3)

  

SQL> exec add_sal(i_empno,addsal);

您需要传递 参数名称本身。

此外,addsal OUT参数,您需要先声明

SQL * Plus

SQL> CREATE OR REPLACE PROCEDURE add_sal(
  2      i_empno NUMBER,
  3      addsal OUT NUMBER)
  4  IS
  5  BEGIN
  6    SELECT sal+1000 INTO addsal FROM emp WHERE empno=i_empno;
  7  END;
  8  /

Procedure created.

SQL>
SQL> SHO ERR
No errors.
SQL>
SQL> variable addsal NUMBER
SQL>
SQL> EXEC add_sal(7369, :addsal);

PL/SQL procedure successfully completed.

SQL>
SQL> PRINT addsal

    ADDSAL
----------
      1800

SQL>

或者,独立于SQL * Plus ,您可以将其作为匿名阻止执行:

SQL> set serveroutput on
SQL> DECLARE
  2     o_addsal NUMBER;
  3  BEGIN
  4     add_sal(7369, o_addsal);
  5     DBMS_OUTPUT.PUT_LINE('The output is : '||o_addsal);
  6  END;
  7  /
The output is : 1800

PL/SQL procedure successfully completed.

SQL>

答案 1 :(得分:0)

要在$http.post('https://localhost:3003/posts/search', {string: '.'}) .then(getPostCompleted).catch(function (message) { handleException(message); }); 语句中使用i_empno,您必须先定义它:

exec

或者你需要传递一些价值:

VARIABLE i_empno NUMBER
VARIABLE addsal NUMBER
BEGIN
 :i_empno:=4;
END;
/
exec add_sal(:i_empno,:addsal);