Oracle 大表之間關聯update

2022-04-11 09:55:53 字數 1957 閱讀 2947

declare

maxrows number default 5000;

row_id_table dbms_sql.urowid_table;

p_id_table dbms_sql.varchar2_table;

cursor acnt_first_cur is

select/*+ use_hash(t1,t2) parallel(t1,4) parallel(t2,4) */ t2.service_type, t1.rowid

from kfgl_p_web_access_t9 t1,lc_cp.b_serv_t@to_hubei_ods1_t t2

where t1.acc_nbr = t2.acc_nbr

and t2.state = 'f0a'

and t1.par_id =1

order by t1.rowid;

begin

open acnt_first_cur ;

loop

fetch acnt_first_cur bulk collect into p_id_table, row_id_table limit maxrows;

exit when row_id_table.count =0;

forall i in 1 .. row_id_table.count

update kfgl_p_web_access_t9 set service_type =nvl(p_id_table(i),'/s/t/fix')

where rowid = row_id_table(i) and par_id =1;

commit ;

end loop ;

close acnt_first_cur;

end ;

由於 forall 語句不能用動態的sql ,而表名又必須變,

所以在執行的時候,把上面的語句都寫在乙個 v_sql中,然後執行sql語句。

v_sql :='declare

maxrows number default 2000;

row_id_table dbms_sql.urowid_table;

p_id_table dbms_sql.varchar2_table;

cursor acnt_first_cur is

select/*+ use_hash(t1,t2) parallel(t1,4) parallel(t2,4) */ t2.service_type, t1.rowid

from '||v_table_name||' t1,lc_cp.b_serv_t@to_hubei_ods1_t t2

where t1.acc_nbr = t2.acc_nbr

and t2.state = ''f0a''

and t1.par_id ='||v_day_id||'

order by t1.rowid;

begin

open acnt_first_cur ;

loop

fetch acnt_first_cur bulk collect into p_id_table, row_id_table limit maxrows;

exit when row_id_table.count =0;

forall i in 1 .. row_id_table.count

update '||v_table_name||' set service_type =p_id_table(i)

where rowid = row_id_table(i) and par_id ='||v_day_id||';

commit ;

end loop ;

close acnt_first_cur;

end ;';

execute immediate v_sql ;

這樣就兼顧了快速跟動態了。

表之間的關聯 Oracle

分類 計算機 為了做報表,經常對資料庫裡資料的操作,應該算是自己的一點小小的經驗.在這裡為了方便敘述,表1 用a 表示 表2 用b表示 a a1,a2,a3 b b1,b2,b3 1.直連 select a.b.from a,b where a.a1 b.b1 作用 求兩個表中的交集.2.左連或右連...

oracle表之間的關聯方式

oracle表之間的關聯方式多表之間的連線有三種方式 nestedloops,hash join 和 sort merge join.一 nested loop 對於被連線的資料子集較小的情況,巢狀迴圈連線是個較好的選擇。在巢狀迴圈中,內錶被外表驅動,外表返回的每一行都要在內表中檢索找到與它匹配的行...

oracle關聯表更新

如果有a表和b表,sql server中用 update a set field2 b.filed2 from a,b where a.field1 b.field1搞定,所以用慣了sql server的更新表語句,再用oracle的那真是特別的拗口。情景一 如果只是更新固定值,oracle和sql...