oracle 儲存過程返回結果集

2021-09-08 10:35:45 字數 2788 閱讀 8225

好久沒上來了, 難道今天工作時間稍有空閒, 研究了一下oracle儲存過程返回結果集.

配合oracle臨時表, 使用儲存過程來返回結果集的資料讀取方式可以解決海量資料表與其他表的連線問題. 在儲存過程中先根據過濾條件從海量資料表中選出符合條件的記錄並存放到臨時中, 可以通過乙個檢視將臨時表與其他相關表連線起來, 從而避免海量資料造成的連線效率問題.

本文只討論使用儲存過程返回結果集.

具體實現如下:

-- 啟用伺服器輸出

---------------------

set serveroutput on

-- 建立測試表

---------------------

create table test_pkg_test

(id number(10) constraint pk_test_pkg_test primary key,

name varchar2(30)

);-- 寫入測試資料

---------------------

begin

insert into test_pkg_test(id) values(1);

insert into test_pkg_test(id) values(2);

insert into test_pkg_test(id) values(3);

insert into test_pkg_test(id) values(4);

insert into test_pkg_test(id) values(5);

insert into test_pkg_test(id) values(6);

insert into test_pkg_test(id) values(7);

insert into test_pkg_test(id) values(8);

insert into test_pkg_test(id) values(9);

insert into test_pkg_test(id) values(10);

insert into test_pkg_test(id) values(11);

insert into test_pkg_test(id) values(12);

insert into test_pkg_test(id) values(13);

insert into test_pkg_test(id) values(14);

insert into test_pkg_test(id) values(15);

insert into test_pkg_test(id) values(16);

insert into test_pkg_test(id) values(17);

insert into test_pkg_test(id) values(18);

end;

/update test_pkg_test set name='name of ' || to_char(id);

commit;

-- 宣告程式包

---------------------

create or replace package pkg_test

astype  type_cursor is ref cursor;

procedure read_rows (header varchar2, result out type_cursor);

end pkg_test;

/-- 實現程式包

---------------------

create or replace package body pkg_test

asprocedure read_rows (header varchar2, result out type_cursor)

issqltext varchar2(500);

begin

if header is null or length(header)=0 then

sqltext := 'select * from test_pkg_test';

else

sqltext := 'select * from test_pkg_test where substr(name,1,' || to_char(length(header)) || ')=''' || header || '''';

end if;

--dbms_output.put_line(sqltext);

open result for sqltext;

end read_rows;

end pkg_test;

/-- 在 sqlplus 中測試

---------------------

var result refcursor

exec pkg_test.read_rows(null,:result);

print result

exec pkg_test.read_rows('name of 1', :result);

print result;

-- 在程式中測試(c#.net)

-- ***************************************

static class pkg_test

\t", reader.getvalue(0), reader.getvalue(1));}}

}}-- 刪除程式包和測試表

---------------------

drop package pkg_test;

drop table test_pkg_test;

Oracle 儲存過程返回結果集

oracle 儲存過程返回結果集 1.返回陣列 在oracle後台建立乙個程式包或者儲存過程 connect scott tiger create or replace package ado callpkg as type eid is table of number 4 index by bin...

oracle 儲存過程 返回結果集

oracle儲存過程如何返回結果集 最簡單的方式 返回oracle的系統游標 create or replace procedure card count yljg v start date in varchar2,開始時間 v end date in varchar2,結束時間 v parento...

oracle 儲存過程 返回結果集

oracle儲存過程如何返回結果集 最簡單的方式 返回oracle的系統游標 create or replace procedure card count yljg v start date in varchar2,開始時間 v end date in varchar2,結束時間 v parento...