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;
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;
相关文章推荐
- oracle中插入数据出现错误:ORA-02291: 违反完整约束条件 (SCOTT.FK_SX9MLJB8T3FWB40GVCSKHYSYT)- 未找到父项关键字
- 在给数据库输入数据时,提示:ORA-02291:违反完整性约束条件(HUYANG.SYS_C009677)-未找到父项关键字........
- oracle中插入数据出现错误:ORA-02291: 违反完整约束条件 (SCOTT.FK_SX9MLJB8T3FWB40GVCSKHYSYT)- 未找到父项关键字
- oracle更新数据,提交(commit)后,如何"回滚"
- oracle imp遇到违反唯一约束条件 (GZW.SYS_C006112)
- oracle数据库出现“批处理中出现错误: ORA-00001: 违反唯一约束条件”解决方法
- oracle插入数据报ORA-00001:违反唯一约束条件
- Oracle:ORA-00001 违反唯一约束条件
- T3记账时提示:运行时错误‘-2147217873(80040e2f)\':违反了PRIMMARY KEY 约束‘GL-mpostcond1_pk\"不能在对象‘GL-Mpostcond1中键入重复键
- oracle主键自动增长的实现 Oracle Sequence oracle maxid自动生成--ORA-00001: 违反唯一约束条件 (NAME.SYS_C005547)产生的原因之一(select * from all_cons_columns w
- ORACLE:ORA-00001:违反唯一约束条件解决方法
- Oracle报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录
- 系统提示java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件
- windows7 不能更新,提示:"WindowsUpdate_80240016" "WindowsUpdate_dt000",如何解决?
- 如何解决异常:SqlExceptionHelper:129 - ORA-00001: 违反唯一约束条件 (CRM.SYS_C007084)
- imp命令不能正常终止 提示"即将启用约束条件..."
- oracle 11g ORA-02291: 违反完整约束条件 - 未找到父项关键字
- Ubuntu 16.04更新软件提示"需要安装不能信任的软件包" http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease
- oracle在已有重复数据的列上创建唯一约束
- orcale ORA-02291:违反完整约束条件-未找到父项关键字