这是我的存储过程:
CREATE OR REPLACE PROCEDURE STATS_SD
(
P_ID IN NUMBER,
PRC OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN PRC FOR
SELECT
ID,
SESID
FROM RESPONSES
WHERE ID IN (P_ID)
END;
当我尝试使用
执行它时EXEC EXAM_STATS_STUDENTS_SD('6901');
我收到以下错误:
PLS-00306:调用' STATS_SD'
时参数的数量或类型错误
你有什么想法吗?
答案 0 :(得分:1)
您将错误的数据类型传递给您的过程。
根据您的声明,预计会NUMBER
:
P_ID IN NUMBER
但是,在exec命令中传递VARCHAR2:
EXEC EXAM_STATS_STUDENTS_SD('6901');
注意值周围的''
。
请尝试调用此方法:
EXEC EXAM_STATS_STUDENTS_SD(6901);
除此之外,你完全没有第二个参数。
答案 1 :(得分:1)
以下是使用作为sys_refcursor的OUT参数的示例。请注意,我关闭使用它的pl / sql块中的光标(这很重要!):
create or replace procedure get_data(o_cur OUT SYS_REFCURSOR) as
begin
OPEN o_cur FOR
select * from emp;
end;
并使用get_data过程:
declare
l_cur sys_refcursor;
l_row emp%rowtype;
begin
get_data(l_cur);
LOOP
fetch l_cur
into l_row;
exit when l_cur%notfound;
-- do something with l_row here
END LOOP;
close l_cur;
end;