oracle – 从过程结果中获取列名
发布时间:2021-01-19 01:39:10 所属栏目:站长百科 来源:网络整理
导读:我没有db的履历,但我试图从存储进程的功效中获取列名. 代码必需是通用的,由于存储进程是未知的. 第一步是使它合用于没有输入参数的措施(只有io_cursor) 我的代码到此刻为止: procedure fakeProc ( io_cursor in out t_ref_cursor ) 我正在行使的代码: PROC
我没有db的履历,但我试图从存储进程的功效中获取列名.
我的代码到此刻为止: 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; 错误:PL / SQL:语句被忽略 办理要领你很靠近,你只是穷乏DBMS_SQL.TO_CURSOR_NUMBER 将光标转换为游标数,以及动态PL / SQL绑定变量.
create or replace procedure fakeProc (io_cursor in out sys_refcursor) is begin open io_cursor for 'select 1 column1,''asdf'' column2 from dual'; end; / create or replace PROCEDURE get_SQL_Fields ( out_result out varchar2) as v_cur NUMBER := NULL; v_count NUMBER := NULL; v_tab_desc DBMS_SQL.DESC_TAB; v_cursor SYS_REFCURSOR; BEGIN execute immediate 'begin fakeProc(:v_cursor); end;' using in out v_cursor; v_cur := dbms_sql.to_cursor_number(v_cursor); DBMS_SQL.DESCRIBE_COLUMNS(v_cur,v_tab_desc); FOR i IN 1..v_count LOOP out_result := out_result||case when i = 1 then null else ',' end ||v_tab_desc(i).COL_NAME; END LOOP; END get_SQL_Fields; / declare v_output varchar2(32767); begin get_sql_fields(v_output); dbms_output.put_line(v_output); end; / COLUMN1,COLUMN2 这假设该进程只有一个参数.谜底是否必要合用于任何也许的参数组合? (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |