PL SQL 記錄集合IS TABLE OF的使用

2021-07-09 02:42:10 字數 1283 閱讀 6837

在pl/sql**塊中使用select into 賦值的話,有可能返回的是乙個結果集。此時,如果使用基本型別或自定義的記錄型別,將會報錯。

因此,需要定義乙個變數,是某種型別的集合。下面以乙個基於表的行型別的集合為例簡單介紹一下(相信基本型別同理吧)。

1

declare

2cursor cur_tx is

select gkey from

t ;3 subtype tx_type is t%rowtype ; --

定義型別

4 type tx_tab is

table

of tx_type;--

定義新型別,是某個型別的集合

5 k t.gkey%

type;

6 v_tx tx_tab:=tx_tab();--

使用時應例項化,否則報錯

7begin

8open

cur_tx;

9fetch cur_tx into

k;10

select

*bulk collect into v_tx from t where gkey=k; --

返回結果集

11 forall x in v_tx.first .. v_tx.last--

遍歷操作

12--

statement;

13close

cur_tx;

14end;

集合型別要用is table of來定義,表示是乙個集合。

/*在使用時,一定要例項化,否則報錯:local collection types not allowed in sql statements. 還表示collection type應該是schema級的才能使用。*/

(注:經檢查,與例項化無關,與select into時要使用bulk collect 有關)

當然也可以使用游標,將結果集放在游標中。這裡只是提供另一種思路。

這裡提到了bulk collect和forall 批量繫結檢索。

forall與bulk collect的使用方法: 

1.使用forall比for效率高,因為前者只切換一次上下文,而後者將是在迴圈次數一樣多個上下文間切換。 

2.使用bluk collect一次取出乙個資料集合,比用游標條取資料效率高,尤其是在網路不大好的情況下。但bluk collect需要大量記憶體,因此最好確保每次取出的記錄不會很多。 

參考:

PL Sql記錄,集合,記錄表的使用

為了處理單行單列的資料,開發人員可以使用標量變數 為了處理單行多列的資料,開發人員可以使用pl sql記錄 而為了處理單列多行資料,開發人員可以使用pl sql集合。記錄表處理多行多列。記錄的使用 declare type emp record is record name t emp.ename ...

開發記錄 集合重複BUG問題

上週記錄過乙個編寫將集合1中有而集合二中沒有的資料取出成新集合的方法,上次的方法看似是可用的,但是在實際使用過程中卻出現了無法進行型別轉化的問題而導致了bug的出現。畢竟在常規使用中並非所有用到此方法的型別都是同乙個型別,所以對這個方法進行改進。上一次的使用是在hibernate下用了一下方式取值 ...

Linq查詢datatable的記錄集合

通過linq查詢datatable資料集合滿足條件的資料集 1.首先定義查詢欄位的變數,比方深度 string strdepth 查詢深度的值 var datarows from datarow in datatable 須要查詢的datatable資料集 asenumerable where st...