请问各位高手在 oracle 中 如何编写 存储过程 SQL实现动态查询

解决方案 »

  1.   

    declare 
      -- Local variables here
      i integer;
      SqlString varchar2(500);
      Ctest sys_refcursor;
      TableName    tab.tname%type;
    begin
      -- Test statements here
      SqlString:='select  tname from tab';
      open Ctest for sqlstring;
      
      fetch Ctest into TableName;
      while Ctest%found  loop
          dbms_output.put_line(TableName);
          fetch Ctest into TableName;
      end loop;
      Close Ctest;
    end;
    ----------------
     A Simple Test
      

  2.   

    create or replace procedure is
    v_sql varchar2(100);
    begin 
    v_sql:'select * from tab';
    execute immediate v_sql;
    end
      

  3.   

    请问 kingofworl(良辰美景虚度) 
    create or replace procedure is
    v_sql varchar2(100);
    begin 
    v_sql:'select * from tab';
    execute immediate v_sql;
    end
    中可以将fetch结果放到 ref cursor中吗?
      

  4.   

    --先定議要用到的變量
    v_Cursorid                      Integer;
    v_c1                        Number;
    v_c2     Number;
    v_c3             Number;
    v_c4               Number;
    v_Ignore                       Integer;
    v_sql_statement_c:='select * from table';--定義cursor
    v_Cursorid := Dbms_Sql.open_cursor;
    Dbms_Sql.parse(v_Cursorid,v_sql_statement_c,Dbms_Sql.native);
                    
    Dbms_Sql.define_column(v_Cursorid,1,v_c1);
    Dbms_Sql.define_column(v_Cursorid,2,v_c2);
    Dbms_Sql.define_column(v_Cursorid,3,v_c3);
    Dbms_Sql.define_column(v_Cursorid,4,v_c4);--執行Sql 並把結果放到cursor中
     Begin
           v_Ignore:=Dbms_Sql.execute(v_Cursorid);
     Exception When Others Then
    Dbms_Output.Put_Line('SQL Execute Error!!');
    End;
      

  5.   

    请问 cursor 中的结果集否作为结果集输出?
    比如像ref cursor 保存结果。
      

  6.   

    结果集中的数据怎么输出呀! return cursor 可以吗?
      

  7.   

    结果集中的数据怎么输出呀! return cursor 可以吗?
      

  8.   

    多行动态select,输出结果集只能使用弱游标变量
    单行动态select 或 dml 语句可以使用
    koujm(koujm) 的方法!