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...