2012-02-23 81 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行。

以下PL/SQL块返回4个更新的行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