我有一個包含數百萬條記錄的表。我想更新大約 30.000 行。我可以使用select * from customer where city is not null. 此查詢回傳 30.000 行。我只想像這樣更新 30000 行
update customer set city = null where (select .....)
我想更新 30.000 行而不是所有表,所以我必須使用 select 陳述句,否則普通更新需要很長時間:(
你有什么主意嗎?我如何撰寫查詢或腳本來完成此程序。
我的觸發器是這樣的,
TRIGGER "CUSTOMER_HIST_TR" AFTER
UPDATE OF city ON Customer REFERENCING NEW AS NEW OLD AS OLD FOR EACH
ROW
DECLARE
v_osuser varchar2(20);
v_terminal varchar2(20);
v_username varchar2(20);
v_city varchar2(2);
BEGIN
if nvl(:new.city,'NULL')<>nvl(:old.city,'NULL') then
select osuser,username,terminal
into v_osuser,v_username,v_terminal
from v$session
where audsid=userenv('SESSIONID');
insert into
IT_TRG_CITY(customer_id,old,new,osuser,terminal,userid,chng_date) values(:old.customer_id,:old.subs_mask,:new.subs_mask,v_osuser,v_terminal,v_username,sysdate);
end if;
END;
uj5u.com熱心網友回復:
如果在這數百萬行中,有 30.000 行在列中有一些東西city(而你想擁有null),那么
update customer set
city = null
where city is not null;
正確的?
選擇你可以嘗試而不是你的:
SELECT osuser, username, terminal
INTO v_osuser, v_username, v_terminal
FROM (SELECT osuser,
username,
terminal,
ROW_NUMBER () OVER (ORDER BY NULL) rn
FROM v$session
WHERE audsid = USERENV ('SESSIONID'))
WHERE rn = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455858.html
標籤:甲骨文
下一篇:我是否必須在休眠物體中設定ID值
