好久沒上來了, 難道今天工作時間稍有空閒, 研究了一下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...