在 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;
執行範例的結果 :