如何使用in和out参数在Oracle中执行存储过程?

时间:2016-09-01 14:15:32

标签: oracle stored-procedures

这是我的存储过程:

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'

时参数的数量或类型错误

你有什么想法吗?

2 个答案:

答案 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;