oracle存储过程错误定位处理?

xiaozhibin01 2008-12-02 04:06:58
在存储过程中执行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
在执行到某一条错误那怎么样才能定位出错误的行号,,非常感谢!!!
...全文
752 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
又是违规昵称 2008-12-03
  • 打赏
  • 举报
回复
遇到过, 可以处理
4楼的方法需要用自治事务

我的办法是
执行的时候, 把当前记录的主键取出来, 放到临时变量中,
对可能抛异常的段另外包装一层, 保证异常后程序仍然可以继续执行
然后把临时变量中的主键号打印出来就好了



xiaozhibin01 2008-12-03
  • 打赏
  • 举报
回复
用plsql是没有问题的,可是写在存储过程里面用shell调用就看不到了,,只能写到日志表里面,那就得知道是哪条记录的!
多壮志 2008-12-03
  • 打赏
  • 举报
回复
有点无聊的问题.
遇到错误后,oracle已经回滚了.
其实你希望的就是知道那条查询结果导致错误而已.
在比较简单的情况下,直接执行查询字句,然后再根据insert语句的提示来判断哪行的数据有问题.
没什么困难的.
菜谱 2008-12-03
  • 打赏
  • 举报
回复
执行过程后,有出错的话
在命令行(pl/sql),使用命令
show err 回车
hyee 2008-12-03
  • 打赏
  • 举报
回复
SQL> CREATE TABLE T(X INT);

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表的插入错误,不知道是不是楼主所需要的

xkx2003 2008-12-03
  • 打赏
  • 举报
回复
楼主加上一个exception,出现异常就记录一下error
zxliujason 2008-12-02
  • 打赏
  • 举报
回复
不太明白楼主意思?是因为数据等错误导致错误还是。。。
wangsong145 2008-12-02
  • 打赏
  • 举报
回复
我记得好像使用pl/sql时你测试存储过程如果出错的话,就会弹出提示是否查看错误,然后直接把错误就指到该行了,
楼主可以试试

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧