功能要求:
传入一条简单的查询语句 eg:select a,b,c,... from X
表名不定,列名数目、类型也不定,要求返回查询结果,即每列的值。

解决方案 »

  1.   

    create or replace procedure ccc(p_sql varchar2, p_cursor out sys_refcursor) 
    as
    begin
      OPEN p_cursor FOR p_sql;
    end;
      

  2.   

    你好,返回游标变量如何解析里面的列呢,因为列名未知的,就算能通过SQL语句解析到表名和列名,该怎么用列名去解析游标
      

  3.   

    我能想到的办法大致如下了:
    DECLARE 
      l_sqltext VARCHAR2(2000); 
      type t_cur is ref cursor;
      v_ser t_cur; 
      TYPE array_t IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;  
      rec_array array_t; 
    BEGIN 
      l_sqltext := 'select oh.header_id/*,oh.order_number,oh.ordered_date*/ from oe_order_headers_all oh where oh.header_id in(2536,2440,2498)';--可以是任意有效的查询sql文本 l_curid   := dbms_sql.open_cursor(); 
      open v_ser for l_sqltext; 
      FETCH v_ser BULK COLLECT INTO rec_array; 
      FOR i IN rec_array.FIRST .. rec_array.LAST 
      LOOP
        dbms_output.put_line(rec_array(i));
      END LOOP;
    END;
      

  4.   

    过程里定义一个prm_OUTRESULT     OUT sys_refcursor返回参数,返回结果集就赋值给返回参就行了,过程最后OPEN  prm_OUTRESULT for p_slq
      

  5.   

    你仅是用put做展现还是另有他用?
      

  6.   

    dbms_sql