我已经创建了存储过程但无法执行相同的操作

时间:2015-09-17 18:25:38

标签: oracle plsql

我定义了一个存储过程

create or replace procedure spfirst
(
  sp_loc out varchar,
  sp_sal out int
)
as
begin
  select LOCATION, MONTHLY_SALARY 
    into sp_loc, sp_sal 
    from nilesh;
end;

然后我调用该过程并收到错误

begin 
spfirst;
end;

ORA-06550: line 2, column 1:
PLS-00201: identifier 'SPNAME' must be declared
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored

1 个答案:

答案 0 :(得分:4)

您的程序有两个参数。你在没有任何参数的情况下调用它。因此,Oracle会查找名为DECLARE l_location nilesh.location%type; l_salary nilesh.monthly_salary%type; BEGIN spfirst( l_location, l_salary ); END; 的过程,该过程不接受任何参数,找不到此类过程,并抛出错误。

这样的东西
dbms_output

应该有效。当然,您通常希望对返回的变量执行某些操作。如果您已启用DECLARE l_location nilesh.location%type; l_salary nilesh.monthly_salary%type; BEGIN spfirst( l_location, l_salary ); dbms_output.put_line( 'Location = ' || l_location ); dbms_output.put_line( 'Salary = ' || l_salary ); END; ,则可以将其打印出来

nilesh

请注意,除非select into表只有一行,否则您的过程将抛出错误。您可能希望该过程采用一个附加参数作为表的关键,以便sys_refcursor始终返回单个行,或者您希望函数返回out而不是一个包含多个if (Dag > 0 && Dag < 32); 参数的过程。

相关问题