在 Oracle Stored Procedure 中,
除了用 Table Array 方式之外,
也可以利用 Cursor 當作 Procedure 參數的 data type,
這樣就可以傳遞多筆與多個欄位的資料,
參考範例, 如下 :
1) 建立 Package
create or replace package tomPackage is
-- 宣告 ref Cursor 資料型態
type tomCursor is ref Cursor;
-- 使用 Cursor 做為參數的資料形態
procedure tomPro( p_data tomCursor );
end tomPackage;
2) 建立 Package Body
create or replace package body tomPackage is
procedure tomPro( p_data tomCursor )
is
vObjectName varchar2(30);
vObjectType varchar2(30);
begin
dbms_output.put_line( 'Object_name Object Type' );
dbms_output.put_line( '------------------------------ ------------------------------' );
-- 取得 Cursor 資料
loop
fetch pData into vObjectName, vObjectType;
exit when pData%notfound;
dbms_output.put_line( rpad( vObjectName, 31, ' ') || vObjectType );
end loop;
-- 關閉 Cursor
close pData;
end tomPro;
end tomPackage;
3) 執行範例
declare
v_data tomPackage.tomCursor;
begin
-- Open Cursor 的 Select 欄位, 需與 Package 內的 Fetch Into 變數的數目一樣
open v_data for
select object_name
, object_type
from all_objects
where object_name like 'XXWF%';
-- 傳送多筆與多個欄位的 Cursor 資料到 Package 中
tomPackage.tomPro( v_data );
end;
執行範例的結果 :