要找出未更新的记录?

时间:2012-02-23 05:47:32

标签: sql oracle plsql oracle9i

如何找到处理哪些记录以及哪些记录未处理?

示例:

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',))

如果我更新了两行。特别是 我想要没有更新的oppar_job_rec(CLCLM,ARCLEVEXT等)的确切名称。

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您还可以考虑审核,但会增加额外费用。 在此doc

之后