Stored procedures Oracle Ref游标和out参数

Stored procedures Oracle Ref游标和out参数,stored-procedures,plsql,oracle11g,ref-cursor,Stored Procedures,Plsql,Oracle11g,Ref Cursor,我需要一个IN-OUT参数和一个引用游标作为存储过程的返回。目前我正在做以下工作 create table dept ( dept_id number, name varchar2(40), location varchar2(200) ); CREATE OR REPLACE PACKAGE HR.SP_PACKAGE AS TYPE dept_type IS REF CURSOR RETURN HR.dept%ROWTYPE; END SP_PACKAGE; CREAT

我需要一个IN-OUT参数和一个引用游标作为存储过程的返回。目前我正在做以下工作

create table dept
( dept_id number,
  name varchar2(40),
  location varchar2(200)
);

CREATE OR REPLACE PACKAGE HR.SP_PACKAGE AS 

  TYPE dept_type IS REF CURSOR RETURN HR.dept%ROWTYPE;

END SP_PACKAGE;

CREATE OR REPLACE PROCEDURE HR.MIXED_IN_INOUT_REF_PARAM 
(
  P_ID IN NUMBER  
, P_NAME_TO_LOCATION IN OUT VARCHAR2  
, P_RCURSOR OUT SP_PACKAGE.dept_type
) AS 
BEGIN
  SELECT name INTO P_NAME_TO_LOCATION FROM HR.dept WHERE dept_id = p_id AND name =  P_NAME_TO_LOCATION;
  OPEN P_RCURSOR FOR
      select *
      from HR.dept;
END MIXED_IN_INOUT_REF_PARAM;
即使编译成功,我在运行时也会遇到一些错误

ORA-06550: line 4, column 17:
PLS-00201: identifier 'CURSOR' must be declared
ORA-06550: line 4, column 13:
PL/SQL: Item ignored
ORA-06550: line 12, column 18:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored
ORA-06550: line 21, column 17:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 21, column 3:
PL/SQL: Statement ignored
我使用的是SQLDeveloper。感谢您的帮助。

像这样改变 拆下回油阀

CREATE OR REPLACE PACKAGE HR.SP_PACKAGE AS 

  TYPE dept_type IS REF CURSOR ;

END SP_PACKAGE;
你可以像这样让它更有活力

open p_cursor FOR  'SELECT *  FROM DEPT where ' ||  V_WHERE;

您的proc
chamibuddhika
没有问题,我认为您的调用方式有问题。我尝试创建了相同的过程,但效果很好。请尝试按如下所示运行您的过程:

declare
v_temp varchar2(200):='ACCOUNTING';
rec SP_PACKAGE.dept_type;
v_rec rec%ROWTYPE;

begin
MIXED_IN_INOUT_REF_PARAM(10,v_temp,rec);

LOOP
FETCH rec INTO v_rec;
EXIT WHEN rec%NOTFOUND;
 dbms_output.put_line(v_rec.name);

END LOOP;

end;
输出

 ACCOUNTING
 RESEARCH
 SALES
 OPERATIONS

您的进程有一个问题,当进程内的查询没有返回任何内容时,它将给您
找不到任何数据
异常。因此您需要在进程中处理该问题。

您确定它们都已创建和编译吗请再次确认包定义中存在一个小问题。通过删除数据库限定符(例如:创建替换包SP_PACKAGE AS..)解决了这个问题。现在,它们都被编译和打包,过程显示为created。请编辑您的帖子,并包含调用PL/SQL过程的代码。谢谢。同义词可能是原因,请检查我怀疑问题在于您没有在
创建表
脚本中使用
HR
作为
dept
前缀。如果您是从另一个架构/登录运行此脚本,则您的其他对象都无法看到该表。我尝试删除该返回,但没有成功:(.关于你的第二个建议,它是否有助于我解决上述特定问题?我不确定我是否完全了解。对V_WHERE参数有点困惑。如果这些都是琐碎的问题,很抱歉。请从Oracle开始。)。