我要是效果是这样的,
ref cursor中select的列数不定,比如可能是“select a1,a2,a5”也可能是“select b7,b2”
那么我每次都要把选中的所有列的值拿出来计算,该怎么取啊
我想用 
fetch c1 into v_arr;(type type_array is table of varchar2(200) index by binary_integer;
type v_cursor IS ref cursor;
c1 v_cursor;)但是不行····应该怎么弄才行》》???

解决方案 »

  1.   

    type_array只能存放一列值吧,取出来的记录是多条还是只有一条呢?
      

  2.   

    恩,只存放一列就行,专门存列名,也就是比如:
    temp_sql:='select '||arr_view(字符串)||' from aaa'; 
          open c1 for temp_sql;
     LOOP
     fetch c1 into ?????-----这里该怎么写?因为列数是动态的
    END LOOP 
    我想
      

  3.   


     fetch c1 into ?????fetch c1 bulk collect into v_arr
      

  4.   

    #2,这样好像不行吧,c1取出来的并不是列名,而是列的具体记录。#4,fetch c1 bulk collect into在这里不会报错,但是我想不符合他的需求。如果只是放列名,为什么不直接把那段字符串处理下放到v_arr呢?按,截取列名,我有一个现成的函数,需要的话明天给你。
      

  5.   

    我要的其实是列里的数据,因为我要针对不同的表,每个表里由用户自定义几列的数据,而且每一行的这几列数据要进行计算,不知道fetch c1 bulk collect into能否完成
      

  6.   

    dbms_sql包怎么解决呢?望指点
      

  7.   

    我收藏的,共享给你:--tom写的print_table
    --将一个查询的结果 记录by记录 地列出来
    create or replace procedure print_table( p_query in varchar2 )
    AUTHID CURRENT_USER
    is
    l_theCursor integer default dbms_sql.open_cursor;
    l_columnValue varchar2(4000);
    l_status integer;
    l_descTbl dbms_sql.desc_tab;
    l_colCnt number;
    begin
    execute immediate
    'alter session set
    nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
    dbms_sql.describe_columns
    ( l_theCursor, l_colCnt, l_descTbl );for i in 1 .. l_colCnt loop
    dbms_sql.define_column
    (l_theCursor, i, l_columnValue, 4000);
    end loop;l_status := dbms_sql.execute(l_theCursor);while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
    for i in 1 .. l_colCnt loop
    dbms_sql.column_value
    ( l_theCursor, i, l_columnValue );
    dbms_output.put_line
    ( rpad( l_descTbl(i).col_name, 30 )
    || ': ' ||
    l_columnValue );
    end loop;
    dbms_output.put_line( '-----------------' );
    end loop;
    execute immediate
    'alter session set nls_date_format=''dd-MON-rr'' ';
    exception
    when others then
    execute immediate
    'alter session set nls_date_format=''dd-MON-rr'' ';
    raise;
    end;
    /
      

  8.   


    http://space.itpub.net/471666/viewspace-118508是否符合你的要求?
      

  9.   


    temp_sql:='select '||arr_view(字符串)||' from aaa';
          open c1 for temp_sql;
    fetch c1 bulk collect into  v_arr;
      

  10.   

    补充一下,把你的动态列名连接成字符串如:temp_sql:='select' || 'a1||a2||a3' ||'from 表名';
    open c1 for temp_sql;
    fetch c1 bulk collect into  v_arr;