我在 Oracle 中有一个函数,我和我的团队都没有写过,而且被严重混淆了。但是,它有一个游标输出参数。如何找出游标包含的数字和类型?
有关我需要的示例,请考虑此游标:
DECLARE
TEMP1 VARCHAR2(500);
TEMP2 NUMBER;
TEMP3 RAW(16);
TEMP SYS_REFCURSOR;
PROCEDURE MAKE_TEMP(TEMP_RETURN OUT SYS_REFCURSOR) IS
BEGIN
OPEN TEMP_RETURN FOR SELECT DUMMY, 5, HEXTORAW('111') FROM DUAL;
END;
BEGIN
MAKE_TEMP(TEMP);
LOOP
FETCH TEMP INTO TEMP1, TEMP2, TEMP3;
EXIT WHEN (TEMP%NOTFOUND);
DBMS_OUTPUT.PUT_LINE('1: '||TEMP1);
DBMS_OUTPUT.PUT_LINE('2: '||TO_CHAR(TEMP2));
DBMS_OUTPUT.PUT_LINE('3: '||RAWTOHEX(TEMP3));
END LOOP;
CLOSE TEMP;
END;
/
如果MAKE_TEMP
是我尝试使用的函数,我需要知道它每行有 3 个值,并且这些值按顺序是 a VARCHAR2
、 aNUMBER
和 a RAW
,这样我就可以定义变量来保存结果。
我正在使用 Oracle 11.2.0.1.0,但如果也存在更新版本的答案,我将不胜感激。
为什么我不能只看源码
如果您必须知道,该函数是 Oracle ASP.NET Membership Provider 的一部分,并且是由 Oracle 编写的。我正在尝试调试一个问题,想看看这个函数返回了什么。该函数的源代码是这样开始的:
create or replace
FUNCTION "ORA_ASPNET_MEM_GETALLUSERS" wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
3
8
9200000
1
4
0
33
如您所见,(充其量)提取有关该光标的任何信息将极其困难。
此示例代码展示了如何解析一个
ref_cursor
. 还有其他可用的列,请参阅 的定义以SYS.DBMS_SQL.desc_tab2
获取可用列的完整列表。在此示例中,我
ref_cursor
的定义为select * from user_tables
. 您当然会用自己的ref_cursor
.