gpt4 book ai didi

oracle - 从过程结果中获取列名

转载 作者:行者123 更新时间:2023-12-05 01:08:43 25 4
gpt4 key购买 nike

我对 db 没有经验,但我试图从存储过程的结果中获取列名。
代码必须是通用的,因为存储过程未知。
第一步是让它适用于没有输入参数的程序(只有 io_cursor)

我的代码直到现在:

procedure fakeProc (
io_cursor in out t_ref_cursor
)

我正在使用的代码:
PROCEDURE get_SQL_Fields (
out_result out varchar2)
as

/**/

v_cur NUMBER := NULL;
v_count NUMBER := NULL;

v_tab_desc DBMS_SQL.DESC_TAB;
sqlstr VARCHAR2(100);
BEGIN

v_cur := DBMS_SQL.OPEN_CURSOR;
--Here i get errors
sqlstr :='begin '|| fakeproc()||';end;';

DBMS_SQL.PARSE(v_cur, sqlstr, DBMS_SQL.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS(v_cur, v_count, v_tab_desc);

FOR i IN 1..v_count LOOP
out_result := out_result||v_tab_desc(i).COL_NAME||',';
END LOOP;

end if;
END get_SQL_Fields;

所以我现在的问题是构建这个 sqlstr ;
我得到的错误是:错误:PLS-00306:调用'FAKEPROC'的参数数量或类型错误
线路:654
文本: sqlstr :='begin '|| fakeproc()||';end;';

错误:PL/SQL:语句被忽略
线路:654
文本: sqlstr :='begin '|| fakeproc()||';end;';

最佳答案

首先创建一个过程来显示来自引用游标的列名和值:

CREATE OR REPLACE procedure printCur(in_cursor IN sys_refcursor) IS
begin

FOR c IN (SELECT ROWNUM rn,
t2.COLUMN_VALUE.getrootelement () NAME,
EXTRACTVALUE (t2.COLUMN_VALUE, 'node()') VALUE
FROM TABLE (XMLSEQUENCE (in_cursor)) t,
TABLE (XMLSEQUENCE (EXTRACT (COLUMN_VALUE, '/ROW/node()'))) t2
order by 1)

LOOP
DBMS_OUTPUT.put_line (c.NAME || ': ' || c.VALUE);
END LOOP;

exception
when others then raise;
end;
/

现在像这样使用它:
declare

v_cur sys_refcursor;

begin
open v_cur for select 'ABC' as vchar_col1, sysdate as date_col2 from dual;

printcur(v_cur);
exception
when others then raise;

end;

输出:
VCHAR_COL1: ABC
DATE_COL2: 28-MAY-2013

关于oracle - 从过程结果中获取列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com