2012-02-23 12 views
1

どのレコードが処理され、どのレコードが処理されないのかを見つけるにはどうすればよいですか?更新されていないレコードを調べるには?

例:

update oppar 
set oppar_run_mode = 0, 
    oppar_run_time = 0, 
    oppar_interval_ind = 'N' , 
    oppar_destination = '', 
    oppar_run_date ='', 
    oppar_run_interval='' 
where (oppar_job_name = oppar_job_rec) and (oppar_job_rec in 
(
'CSCLM', 
'ARCLEVEXT', 
'ARCLEVUPD', 
'ARCLSAEXT', 
'ARCLSACA', 
'ARCLSACL', 
'ARCLSAAG', 
'ARCLSAGN',    
'ARCLSAWO', 
'ARCLSALN', 
'ARCLSASU', 
'ARCLSACBL',)) 

私は二列updated.Especially のように取得する場合、私は更新されませんoppar_job_recの正確な名前(CLCLM、ARCLEVEXTなど)をします。

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

答えて

4

あなたはRETURNING INTO句の使用を検討できます。ここで私が行った小さなテストです。

create table test3 (
    flag1 VARCHAR2(2), 
    id NUMBER 
); 

insert into test3 values ('A', 1); 
insert into test3 values ('A', 2); 
insert into test3 values ('A', 3); 
insert into test3 values ('A', 4); 
insert into test3 values ('B', 5); 

更新私の問題は、次のとおりです。

update test3 set id = id +10 
where flag1 = 'A' 

は、この4行を更新します。 4つの更新された行のPL/SQLブロックに戻りflag1欄の下に

DECLARE 
TYPE vat is table of varchar2(2) index by pls_integer; 
vatt vat; 
begin 
    update test3 set id = id +10 
    where flag1 = 'A' 
    RETURNING flag1 BULK COLLECT INTO vatt; 
    FOR IDX IN VATT.first .. VATT.LAST 
    loop 
     DBMS_OUTPUT.PUT_LINE(VATT(IDX)); 
    END LOOP; 
END; 

結果ショーは、次のとおりです。

A 
A 
A 
A 
0

あなたはまた、監査を考慮することができるが、それは追加のコストを追加します。 これに続いてdoc

関連する問題