Abh*_*ngh 1 java sql oracle jdbc
我有一个oracle查询,我试图使用jdbc执行.以下是查询.
insert into bd_vehicles_temp select * from bd_vehicles_temp_1
Run Code Online (Sandbox Code Playgroud)
table bd_vehicles_temp_1包含大约7000-10000行.如果bd_vehicles_temp_1中的主键已存在于bd_vehicles_temp中,则会得到SQLException:唯一键约束.
异常的行在pstmt.executeUpdate()
我的代码中是幕后的.有没有办法精确定位bd_vehicles_temp_1中导致异常的行.
或者我是否必须循环遍历bd_vehicles_temp_1中的行并逐行插入每一行?
提前致谢 !
找出哪一行导致问题的唯一方法(我知道)是使用Oracle的"log errors into"功能.这样insert
就不会抛出异常,任何违反任何约束的行都会被写入指定的错误表中.
要做到这一点,首先需要创建一个包含被拒绝行的日志表:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为的表 ERR$_BD_VEHICLES_TEMP
然后运行将您的语句更改为:
insert into bd_vehicles_temp
select *
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;
Run Code Online (Sandbox Code Playgroud)
即使行无法验证约束,该语句仍将继续.语句完成后,您可以检查表的内容以查找ERR$_BD_VEHICLES_TEMP
违反约束的行,包括错误消息和值.
(编辑):如果你想在第一个错误处停下来(并在日志表中看到),那么请省略该REJECT LIMIT UNLIMITED
子句.
更多细节见手册:
归档时间: |
|
查看次数: |
1359 次 |
最近记录: |