Check the Contents of Ref Cursors
This article demonstrates a few simple ways to display the contents of a ref cursor.
oracle miscconfigurationintermediate
by OracleDba
18 views
This article demonstrates a few simple ways to display the contents of a ref cursor.
12345678910111213
CREATE OR REPLACE FUNCTION get_ref_cursor
RETURN SYS_REFCURSOR
AS
l_cursor SYS_REFCURSOR;
BEGIN
OPEN l_cursor FOR
SELECT level AS id,
'Description for ' || level AS description
FROM dual
CONNECT BY level <= 5;
RETURN l_cursor;
END;
/123456789101112131415161718
VARIABLE l_cursor REFCURSOR
BEGIN
:l_cursor := get_ref_cursor;
END;
/
PRINT l_cursor
ID DESCRIPTION
---------- --------------------------------------------------------
1 Description for 1
2 Description for 2
3 Description for 3
4 Description for 4
5 Description for 5
SQL>12345678910111213141516171819202122232425
DECLARE
l_cursor SYS_REFCURSOR;
BEGIN
l_cursor := get_ref_cursor;
DBMS_SQL.return_result(l_cursor);
END;
/
PL/SQL procedure successfully completed.
ResultSet #1
ID DESCRIPTION
---------- --------------------------------------------------------
1 Description for 1
2 Description for 2
3 Description for 3
4 Description for 4
5 Description for 5
5 rows selected.
SQL>1234567891011121314151617181920212223242526
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
l_cursor SYS_REFCURSOR;
l_id NUMBER;
l_description VARCHAR2(100);
BEGIN
l_cursor := get_ref_cursor;
LOOP
FETCH l_cursor
INTO l_id, l_description;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_id || ' | ' || l_description);
END LOOP;
CLOSE l_cursor;
END;
/
1 | Description for 1
2 | Description for 2
3 | Description for 3
4 | Description for 4
5 | Description for 5
PL/SQL procedure successfully completed.
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041424344
SET SERVEROUTPUT ON
DECLARE
l_cursor SYS_REFCURSOR;
BEGIN
l_cursor := get_ref_cursor;
APEX_JSON.initialize_clob_output;
APEX_JSON.open_object;
APEX_JSON.write('rowset', l_cursor);
APEX_JSON.close_object;
DBMS_OUTPUT.put_line(APEX_JSON.get_clob_output);
APEX_JSON.free_output;
END;
/
{
"rowset":[
{
"ID":1
,"DESCRIPTION":"Description for 1"
}
,{
"ID":2
,"DESCRIPTION":"Description for 2"
}
,{
"ID":3
,"DESCRIPTION":"Description for 3"
}
,{
"ID":4
,"DESCRIPTION":"Description for 4"
}
,{
"ID":5
,"DESCRIPTION":"Description for 5"
}
]
}
PL/SQL procedure successfully completed.
SQL>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
SET SERVEROUTPUT ON
DECLARE
l_xmltype XMLTYPE;
BEGIN
l_xmltype := XMLTYPE(get_ref_cursor);
DBMS_OUTPUT.put_line(l_xmltype.getClobVal());
END;
/
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ID>1</ID>
<DESCRIPTION>Description for 1</DESCRIPTION>
</ROW>
<ROW>
<ID>2</ID>
<DESCRIPTION>Description for 2</DESCRIPTION>
</ROW>
<ROW>
<ID>3</ID>
<DESCRIPTION>Description for 3</DESCRIPTION>
</ROW>
<ROW>
<ID>4</ID>
<DESCRIPTION>Description for 4</DESCRIPTION>
</ROW>
<ROW>
<ID>5</ID>
<DESCRIPTION>Description for 5</DESCRIPTION>
</ROW>
</ROWSET>
PL/SQL procedure successfully completed.
SQL>
SET LONG 1000000
SELECT XMLTYPE(get_ref_cursor) FROM dual;
XMLTYPE(GET_REF_CURSOR)
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ID>1</ID>
<DESCRIPTION>Description for 1</DESCRIPTION>
</ROW>
<ROW>
<ID>2</ID>
<DESCRIPTION>Description for 2</DESCRIPTION>
</ROW>
<ROW>
<ID>3</ID>
<DESCRIPTION>Description for 3</DESCRIPTION>
</ROW>
<ROW>
<ID>4</ID>
<DESCRIPTION>Description for 4</DESCRIPTION>
</ROW>
<ROW>
<ID>5</ID>
<DESCRIPTION>Description for 5</DESCRIPTION>
</ROW>
</ROWSET>
SQL>12345678910111213141516171819
SET SERVEROUTPUT ON
DECLARE
l_cursor SYS_REFCURSOR;
BEGIN
l_cursor := get_ref_cursor;
csv.output_rc(l_cursor);
END;
/
ID,DESCRIPTION
1,Description for 1
2,Description for 2
3,Description for 3
4,Description for 4
5,Description for 5
PL/SQL procedure successfully completed.
SQL>Please to add comments
No comments yet. Be the first to comment!