PL SQL中的游标

时间:2015-01-27 19:06:15

标签: sql database oracle stored-procedures plsql

我需要调用一个函数,这个函数返回一个游标。 ¿如何将光标作为参数发送?我正在尝试以下方法,但它无法正常工作。 感谢。

DECLARE
  P_NUMBER NUMBER;
  P_TABCURSOR REF CURSOR;    
BEGIN
  P_NUMBER := '80233068';
  P_TABCURSOR := NULL;

P_TABCURSOR:=  PKG_CHANNEL.OBTAIN_CHANNEL (  P_NUMBER => P_NUMBER,
P_TABCURSOR => P_TABCURSOR) ;  
END;

我收到此错误:PLS-00201:必须声明标识符'CURSOR'

4 个答案:

答案 0 :(得分:2)

一定是这个:

TYPE P_TABCURSOR_TYPE IS REF CURSOR; 
P_TABCURSOR P_TABCURSOR_TYPE;

P_TABCURSOR SYS_REFCURSOR;

完全相同,只是更短。

答案 1 :(得分:0)

首先,我认为您的语法已关闭。 我想你想要sys_refcursor。可能有一个对象ref_cursor,但ref cursor是pl / sql的两个变量

https://community.oracle.com/thread/888365

答案 2 :(得分:0)

如果pkg_channel.obtain_channel的参数定义为typeCursor,则必须在规范中定义类型:pkg_channel.typecursor。那就是你需要用作保存out参数的变量的数据类型。

此外,您正在调用某个程序,因此您不会尝试显式设置变量值(即使用:=)。并且不要将变量声明为数字,然后尝试传入一个字符串!相反,你可以这样做:

declare
  p_number number;
  p_tabcursor pkg_channel.typecursor;    
begin
  p_number := 80233068;
  pkg_channel.obtain_channel (p_number => p_number,
                              p_tabcursor => p_tabcursor);  
end;
/

答案 3 :(得分:-1)

你应该先做一个游标。
然后是一个记录,您可以将每个游标值放入其中。

请看这里有关CURSORS和RECORDS的信息。
Click here for link

示例:

首先,您需要创建一个游标。

CURSOR cursorName is
    SELECT id, name 
    FROM Employee; 

然后,您将该光标中的记录提取到记录中。

OPEN cursorName; 
LOOP 
    FETCH cursorName INTO recordName
    EXIT WHEN cursorName%notfound;
END LOOP