CREATE OR REPLACE PACKAGE abc
IS
TYPE abc_cur IS REF CURSOR;
FUNCTION TEST
RETURN abc_cur;
END;
/
CREATE OR REPLACE PACKAGE BODY abc
IS
FUNCTION TEST
RETURN abc_cur
IS
v_select VARCHAR2(2000);
BEGIN
v_select := 'Select a1,a2 from pqr';
OPEN abc_cur FOR v_select;
RETURN abc_cur;
END TEST;
END abc;
这是我创建的虚拟包,在函数test select中是动态的,意味着数据列的变化。现在我的问题是,当我从任何其他过程或函数调用此函数时,我得到引用游标,如果我不知道它动态返回哪一列,我该如何从该游标中获取数据?
答案 0 :(得分:1)
如果a1和a2是动态的,在运行时更改 - 您可以考虑使用dbms_sql而不是refcursor。 Here是如何动态获取行的示例,其中列数及其类型在运行时之前是未知的。您可以根据您的要求进行更改。