我定义了一个存储过程
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
答案 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);
参数的过程。