Oracle Procedure 的一個參數, 宣告為 Cursor, 來傳遞多筆與多個欄位的資料


在 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;

執行範例的結果 :


Related Posts Plugin for WordPress, Blogger...