Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> How to retrieve DBMS_DESCRIBE info in OUT ref_cursor.
Hi All,
Not exactly a DBA question but more of a developer question but any help is appreciated including how to subscribe to Oracle developer forum.
What I need is for the DBMS_DESCRIBE output in a single record set in the
form of a REF CURSOR that can be
returned from a stored procedure as an output parameter. I have a package
with a variable of type REF CURSOR
that can be pulled and pushed in and out of a stored procedure. The
procedure SP_FETCH_CLINICIAN below describes
opening a REF CURSOR (which is the output parameter). A similar REF CURSOR
output parameter is what I need returned
from a proc that would call DBMS_DESCRIBE. The DBMS_DESCRIBE procedure
returns a bunch of NUMBER_TABLE
and VARCHAR2_TABLE datatypes that are described in the package header as
"TABLE OF VARCHAR2" or "TABLE OF NUMBER" types.
I need to somehow iterate through those retuned values from the
DBMS_DESCRIBE procedure and build something that I can
return as a REF CURSOR as an output parameter in a custom stored procedure.
The SP_WSDESCRIBE_PROC below what
I am currently returning (just a VARCHAR2), but It would be great if I
could return the same type of data in a REF CURSOR
output parameter that would represent a cursor built from a select
statement.
For your viewing pleasure are 2 procdures mentioned above.
Thanks
Rick
PROCEDURE SP_FETCH_CLINICIAN
( p_cursor OUT CLINCUR, i_CLINICIAN_ID IN NUMBER, o_RETVAL OUT NUMBER
OPEN p_cursor FOR SELECT CLINICIAN_ID, SITE_ID, LAST_NAME, FIRST_NAME, MIDDLE_NAME, SUFFIX, DEGREE, NT_LOGON_ID, LICENSE_NO, DEA_NO, HIS_ID FROM EMR.CLINICIAN_LOOKUP WHERE CLINICIAN_ID = i_CLINICIAN_ID; EXCEPTION WHEN OTHERS THEN o_RETVAL := SQLCODE;
i_PROCNAME IN VARCHAR, i_OUTTYPE IN VARCHAR, o_OUTBUFF OUT VARCHAR
scale SYS.DBMS_DESCRIBE.NUMBER_TABLE; radix SYS.DBMS_DESCRIBE.NUMBER_TABLE; spare SYS.DBMS_DESCRIBE.NUMBER_TABLE;
overload,position,t_level,argument_name,
datatype,default_value,in_out,t_length,
t_precision,scale,radix,spare);IF overload IS NOT NULL THEN
o_OUTBUFF := '<?xml version="1.0" encoding="utf-8"
?><storedprocedures><storedprocedure name="' || i_PROCNAME ||
'"><parameters>';
FOR i IN overload.FIRST..overload.LAST LOOP select '<parameter name="' || argument_name(i) || '" size="' || t_length(i) || '" precision="' || t_precision(i) || '" ' || 'scale="' || scale(i) || '" datatype="' ||DECODE(datatype(i), 0, 'NULL', 1, 'VARCHAR2', 2, 'NUMBER', 3, 'BINARY_INTEGER',
8, 'LONG', 10, 'ROWID', 12, 'DATE', 23, 'RAW', 24, 'LONG_RAW', 96, 'CHAR', 102, 'REF_CURSOR', 106, 'MLSLABEL', 250, 'RECORD', 251, 'TABLE', 252, 'BOOLEAN') || '" direction ="' || DECODE(in_out(i), 0, 'IN', 1, 'OUT', 2, 'IN_OUT') || '" />' into s_PARMBUFF from dual; select o_OUTBUFF || s_PARMBUFF into o_OUTBUFF from dual; END LOOP;
FOR i IN overload.FIRST..overload.LAST LOOP select argument_name(i) || ', ' || t_length(i) || ', ' || t_precision(i) || ', ' || scale(i) || ', ' || DECODE(datatype(i), 0, 'NULL', 1, 'VARCHAR2', 2, 'NUMBER', 3, 'BINARY_INTEGER', 8, 'LONG', 10, 'ROWID', 12, 'DATE', 23, 'RAW', 24, 'LONG_RAW', 96, 'CHAR', 102, 'REF_CURSOR', 106, 'MLSLABEL', 250, 'RECORD', 251, 'TABLE', 252, 'BOOLEAN') || ', ' || DECODE(in_out(i), 0, 'IN', 1, 'OUT', 2, 'IN_OUT') into s_PARMBUFF from dual; IF i < overload.count THEN select o_OUTBUFF || RTRIM(s_PARMBUFF) || '~' into o_OUTBUFF from dual; ELSE select o_OUTBUFF || RTRIM(s_PARMBUFF) into o_OUTBUFF from dual; END IF;
-- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: INET: Rick_Cale_at_teamhealth.com Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).Received on Fri Mar 22 2002 - 09:38:22 CST