PLSQL集合表類型與對象表區別

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()函數直接返回結果集

相關文章
相關標籤/搜索