oracle 預存程序執行可輸入sql語句並返回結果集,oraclesql

來源:互聯網
上載者:User

oracle 預存程序執行可輸入sql語句並返回結果集,oraclesql

1.建立測試表:

create table AAA
(
  aa NVARCHAR2(100),
  bb NVARCHAR2(100),
  cc NVARCHAR2(100),
  dd NVARCHAR2(100)
)

並匯入測試資料insert into aaa values('1','1','1','1');

2.測試可行性:

DECLARE
       v_cursor NUMBER;
       v_stat NUMBER;
       aa VARCHAR(100);
       bb VARCHAR(100);
       cc VARCHAR(100);
       dd VARCHAR(100);
       v_sql VARCHAR(200);
BEGIN
     v_sql :='select * from aaa';
     v_cursor := dbms_sql.open_cursor; --開啟遊標;
     dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析動態SQL語句;
     dbms_sql.define_column(v_cursor, 1, aa,100); --定義列
     dbms_sql.define_column(v_cursor, 2,bb, 100);
     dbms_sql.define_column(v_cursor, 3,cc,100);
     dbms_sql.define_column(v_cursor, 4, dd,100);
     v_stat := dbms_sql.execute(v_cursor); --執行動態SQL語句。
     LOOP
         EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在結果集中移動遊標,如果未抵達末尾,返回1。
         dbms_sql.column_value(v_cursor, 1,  aa); --將當前行的查詢結果寫入上面定義的列中。
         dbms_sql.column_value(v_cursor, 2, bb);
         dbms_sql.column_value(v_cursor, 3,cc);
          dbms_sql.column_value(v_cursor, 4, dd);
         dbms_output.put_line(aa || ';' || bb || ';' || cc || ';'|| dd);
     END LOOP;
     dbms_sql.close_cursor(v_cursor); --關閉遊標。
END;

輸出1,1,1,1

3.建立預存程序,其中,sql為輸入參數,系統引用遊標為輸出參數,如下:

create or replace procedure myproc
(
mysqlval in varchar2,
rescur out sys_refcursor
)
as
BEGIN
     open rescur for mysqlval;   
END;

4.測試預存程序

sqlplus中,執行如下:

var r refcursor;
exec proc2('select * from aaa',:r);
print r;

輸出是正常的


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.