程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle存儲過程執行可輸入sql語句並返回結果集

oracle存儲過程執行可輸入sql語句並返回結果集

編輯:Oracle教程

oracle存儲過程執行可輸入sql語句並返回結果集


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;

輸出是正常的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved