本帖最后由 wanglianxi2008IT 于 2012-11-21 10:11:01 编辑

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE test_proc
    (
        tablename IN varchar2
    ) IS
    filed_test varchar2(30):='';
    VN_Field_Str varchar2(4000):= '';     CURSOR Cur_fieldsd IS
                       select  column_name 
                       from user_tab_columns  
                       where upper(table_name) = upper(tablename);      
    BEGIN                   OPEN Cur_fieldsd;
                       LOOP
                       FETCH Cur_fieldsd
                       INTO filed_test;    
                       EXIT WHEN Cur_fieldsd%NOTFOUND;
                       VN_Field_Str := VN_Field_Str || filed_test || ',';
                       end loop;
                       CLOSE Cur_fieldsd;    dbms_output.put_line(VN_Field_Str);
      
    END test_proc;
      

  2.   

    游标中有多行数据,
    你把它fetch到一个变量可定时不行的。
    定义一个type 吧
      

  3.   

    游标定义必须放到说明的部分,而不能放到执行部分(即begin与end之间)
      

  4.   


    我有用 loop 循环,这个是没问题的。
      

  5.   

    我有见过放到begin  end 存储过程  之间的游标,可以执行。
      

  6.   

    CREATE OR REPLACE PROCEDURE test_proc
    (
        tablename IN varchar2
    ) IS
    filed_test varchar2(30):='';
    VN_Field_Str varchar2(4000):= '';
          
    BEGIN     declare CURSOR Cur_fieldsd IS
                       select  column_name 
                       from user_tab_columns  
                       where upper(table_name) = upper(tablename);
                       begin
                       OPEN Cur_fieldsd;
                       LOOP
                       FETCH Cur_fieldsd
                       INTO filed_test;    
                       EXIT WHEN Cur_fieldsd%NOTFOUND;
                       VN_Field_Str := VN_Field_Str || filed_test || ',';
                       end loop;
                       CLOSE Cur_fieldsd;  
                       end;
      dbms_output.put_line(VN_Field_Str);
      
    END test_proc;call  test_proc('T_BC_OtherExpenseBill');解决了,这样写就可以执行了,加多多一个begin end;语句块,不过还是要谢谢各位了。
      

  7.   


    在begin  end 存储过程  之间的游标。
    放在块里面的。
    declare
    begin
    end;块里面才可以。