您的位置:首页 > 数据库 > Oracle

oracle更新表数据时,提示"违反唯一约束条件",如何找到不能更新的数据

2018-01-03 11:20 651 查看
oracle数据库,pl/sql工具,最近在用update语句批量更新时,发现更新报错,提示"违反唯一约束条件",如何找到更新出错的数据呢?此处做个记录:

update语句为: update wmwhse2.lotattribute t1 set t1.lottable02='MB1'

where t1.lot in (select lot from wmwhse2.lotattribute_kk0102 t1 where t1.lottable06='W003361');

为了找到更新出错的数据,执行如下sql,可以看到在pl/sql窗口中的output中输出更新报错的lot

DECLARE

NUMROWS INTEGER;

BEGIN

FOR CUR_1 IN (select lot

from wmwhse2.lotattribute_kk0102 t1

where t1.lottable06 = 'W003361') LOOP

BEGIN

NUMROWS := NUMROWS + 1;

update wmwhse2.lotattribute t1

set t1.lottable02 = 'MB1'

WHERE t1.lot = CUR_1.lot;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLERRM || ' 更新失败lot:' || CUR_1.lot);

END;

IF NUMROWS > 1000 THEN

COMMIT;

NUMROWS := 0;

END IF;

END LOOP;

IF NUMROWS > 0 THEN

COMMIT;

END IF;

END;

当然,也可以通过新建存储存储过程来debug,查看执行过程:

CREATE OR REPLACE PROCEDURE TEST IS

BEGIN

DECLARE

NUMROWS INTEGER;

BEGIN

FOR CUR_1 IN (select lot

from wmwhse2.lotattribute_kk0102 t1

where t1.lottable06 = 'W003361') LOOP

BEGIN

NUMROWS := NUMROWS + 1;

update wmwhse2.lotattribute t1

set t1.lottable02 = 'MB1'

WHERE t1.lot = CUR_1.lot;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLERRM || ' 更新失败lot:' || CUR_1.lot);

END;

IF NUMROWS > 1000 THEN

COMMIT;

NUMROWS := 0;

END IF;

END LOOP;

IF NUMROWS > 0 THEN

COMMIT;

END IF;

END;

END TEST;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐