PLSQL表變量類型
ide
TYPE typ_id_record is RECORD(函數
gid NUMBER(10);對象
gno NUMBER(5);it
co NUMBER(5));table
TYPE typ_record_table is table of typ_id_record;class
注意:PLSQL表變量類型必須在包頭定義,不然會提示:Error:PLS-00642:不容許使用本地收集類型test
集合在使用前需清空,typ_record_table.delete變量
對象表變量類型object
CREATE OR REPLACE TYPE typ_id_object as OBJECT(select
gid NUMBER(10);
gno NUMBER(5);
co NUMBER(5));
CREATE OR REPLACE TYPE typ_table_object as table of typ_id_object;
使用bulk collect批量獲取查詢結果集
bulk collect的使用區別
PLSQL表變量typ_record_table能夠直接接受bulk collect,但對象表變量typ_object_table必須先進行轉換
以下所示:
PLSQL表變量typ_record_table
CREATE OR REPLACE PROCEDURE p_f4 IS
tab_ids type_record_table;
BEGIN
SELECT gp.gid, gp.gno, gp.co BULK COLLECT
INTO tab_ids
FROM p_table_test gp;
END p_f4;
對象表變量typ_table_object不能直接接受bulk collect,必須進行轉換
以下所示:
報錯:沒有足夠的值
CREATE OR REPLACE PROCEDURE p_f4 is
tab_ids type_table_object;
begin
select gp.gid,gp.gno,gp.co bulk collect
into tab_ids
from p_table_test gp;
end;
解決辦法: 將object變量進行轉換,以下所示:
CREATE OR REPLACE PROCEDURE p_f4 is
tab_ids type_table_object;
begin
select type_table_object(gp.gid,gp.gno,gp.co) bulk collect
into tab_ids
from p_table_test gp;
end;
在此,要感謝itpub的windtalker_cs,是他的回答讓我明白了一直困擾個人一個問題,以前覺得若是採用object對象表,就沒法使用bulk collect批量獲取結果集。
利用table()函數,咱們能夠將PL/SQL返回的結果集代替table
是否能夠使用table函數
函數返回如果PLSQL類型變量則沒法使用table函數,而object類型變量能夠使用table()函數直接返回結果集