在存储过程中执行insert/select等操作的时候,如果执行到某一条记录的时候出错了,那怎么才能定位到出错的行号?比如说我在做关联
insert into tmp(id,name,cino)
select a.id,b.name,c.cino from tmp_id a
left join tmp_name b
on a.accno=b.accno
left join tmp_cino c
on a.accno=c.accno
where a.bal<>0
在执行到某一条错误那怎么样才能定位出错误的行号,,非常感谢!!!
insert into tmp(id,name,cino)
select a.id,b.name,c.cino from tmp_id a
left join tmp_name b
on a.accno=b.accno
left join tmp_cino c
on a.accno=c.accno
where a.bal<>0
在执行到某一条错误那怎么样才能定位出错误的行号,,非常感谢!!!
楼主可以试试
Table created
SQL> exec dbms_errlog.create_error_log('T','T1',USER);
PL/SQL procedure successfully completed
SQL> INSERT INTO T VALUES('X') LOG ERRORS INTO T1;
INSERT INTO T VALUES('X') LOG ERRORS INTO T1
ORA-01722: 无效数字
SQL> SELECT * FROM T1;
ORA_ERR_NUMBER$ ORA_ERR_MESG$ O ORA_E ORA_E X
--------------- ------------------------------ - ----- ----- ------
1722 ORA-01722: 无效数字 I X通过T1表记录T表的插入错误,不知道是不是楼主所需要的
在命令行(pl/sql),使用命令
show err 回车
遇到错误后,oracle已经回滚了.
其实你希望的就是知道那条查询结果导致错误而已.
在比较简单的情况下,直接执行查询字句,然后再根据insert语句的提示来判断哪行的数据有问题.
没什么困难的.