我需要调用一个函数,这个函数返回一个游标。 ¿如何将光标作为参数发送?我正在尝试以下方法,但它无法正常工作。 感谢。
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'
答案 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的两个变量
答案 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