Oracle Procedure 的一個參數, 宣告為 Table 陣列, 搭配 bulk collect, 來傳遞多筆與多個欄位的資料


在 Oracle Stored Procedure 中,

可以利用 Table Array 當作 Procedure 參數的 data type,

再搭配 bulk collect 來取得多筆多欄位資料,

這樣就可以傳遞多筆與多個欄位的資料,

參考範例, 如下 :

 1) 建立 Package
create or replace package tomPackage is

-- 宣告 Table 資料型態
type tomArray is table of user_objects%rowtype;

-- 使用 Table 做為參數的資料形態
procedure tomPro( p_data tomArray );

end tomPackage;

 2) 建立 Package Body
create or replace package body tomPackage is

procedure tomPro( p_data tomArray )
is
begin
dbms_output.put_line( 'Object_name Object Type' );
dbms_output.put_line( '------------------------------ ------------------------------' );

-- 取得資料, 且顯示之
for i in 1..p_data.count loop
dbms_output.put_line( rpad(p_data(i).object_name, 31, ' ') || p_data(i).object_type );
end loop;
end tomPro;

end tomPackage;

 3) 執行範例
declare
v_data tomPackage.tomArray;
begin
-- 利用 Bulk Collect 抓取多筆資料寫入到 Table 變數中
select *
bulk collect into v_data
from all_objects
where object_name like 'XXWF%';

-- 傳送多筆與多個欄位的 Table 資料到 Package 中
tomPackage.tomPro( v_data );
end;

執行範例的結果 :


Related Posts Plugin for WordPress, Blogger...