BULK COLLECT(成批聚合類型)和數組集合type類型is table of 表%rowtype index by binary_integer用法筆記 例1: 批量查詢項目資金賬戶號為 "320001054663"的房屋賬戶信息並把它們列印出來 . 說明部分: 1. DECLARE 說明以 ...
BULK COLLECT(成批聚合類型)和數組集合type類型is table of 表%rowtype index by binary_integer用法筆記
例1: 批量查詢項目資金賬戶號為 "320001054663"的房屋賬戶信息並把它們列印出來 .
DECLARE TYPE acct_table_type IS TABLE OF my_acct%ROWTYPE INDEX BY BINARY_INTEGER; v_acct_table acct_table_type; BEGIN SELECT * BULK COLLECT INTO v_acct_table FROM my_acct WHERE parent_fund='320001054663'; FOR i IN 1..v_acct_table.COUNT LOOP ---迴圈列印 dbms_output.put_line('ACCT:'||v_acct_table(i).fund|| ','||v_acct_table(i).bal||','||v_acct_table(i).real_nmbr); END LOOP; END;
說明部分:
1. DECLARE 說明以下你要聲明的部分
2. Type 聲明是類型acct_table_typ e 類型的名字
3. IS TABLE OF 指定是一個集合的表的數組類型, 簡單的來說就是一個可以存儲一列多行的數據類型 , my_acct指出在哪個表上( 存在的表 ) %ROWTYPE 指在表上的行的數據類型.
4. INDEX BY BINARY_INTEGER 指索引組織類型
5. v_acct_table 定義一個變數來存儲集合數據類型
6. BULK COLLECT INTO 指是一個成批聚合類型, 簡單的來說 , 它可以存儲一個多行多列存儲類型 ,into 後面指定從哪裡來 ,
7. v_acct_table.COUNT 用來 v_acct_table 裡面的數量
8. (i)表示下標號
例2: 批量更新項目資金賬戶號為 "320001054663"的房屋賬戶的餘額。
DECLARE TYPE fund_table_type IS TABLE OF acct.fund%TYPE; TYPE bal_table_type IS TABLE OF acct.bal%TYPE; v_fund_table fund_table_type; v_bal_table bal_table_type; BEGIN UPDATE acct SET bal=bal*1000 WHERE parent_fund='320001054663' RETURNING fund,bal BULK COLLECT INTO v_fund_table,v_bal_table; FOR i IN 1..v_fund_table.COUNT LOOP dbms_output.put_line('ACCT:'||v_fund_table(i)||','||v_bal_table(i)); END LOOP; END;
說明部分:
1. %TYPE和 acct.fund數據類型一樣
v_fund_table fund_table_type;
2. v_bal_table bal_table_type; 定義變數來存儲它們 .
3. RETURNING 用來指定要返回的部分 ,BULK COLLECT INTO 成批聚合類型
4. 用for 把它們列印出來
總結 :
- 實驗時把set serveroutput on 打開
- 以上的例子的目的主要是為了提高性能. 這裡的性能主要指的是速度 .
- 速度指的是批量插入, 更新 , 刪除 , 為什麼會提高速度呢 ? 提取到的數據都在記憶體中進行處理, 因為在記憶體處理比較快 , 這是常識 .
@author:zhengwei
@date:2017-04-28