lzth.net
当前位置:首页 >> 请教各位高手 orAClE 存储过程 如何将获得捕获异常... >>

请教各位高手 orAClE 存储过程 如何将获得捕获异常...

可以先定义个变量,发生异常的时候将异常信息赋值给变量,插入表的时候用变量,日志表没给表结构,我自己重新定义了一个,测试ok.CREATE TABLE T_LOG_ERROR(ERR_ID NUMBER,ERR_TIME DATE,ERR_CODE NUMBER,ERR_

--通过sqlcode , sqlerrm 这两个内置变量来查看,例如:DECLARE --声明异常 some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition v_ErrorCode NUMBER; -- Variable to hold the error message code v_ErrorText VARCHAR

条件改成下面的.if sqlcode=-1427

存储过程有一块是exception 这里在这里捕获异常,并且可以写入表中

用Oracle的企业管理器EM,在那个里面运行PL/SQL就能看到错误的具体信息了

EXCEPTION WHEN excepttion_name1 then WHEN excepttion_name2 then WHEN excepttion_name3 then End;

如果数据库是10g及以上版本,可以使用dbms_utility.format_error_backtrace(),这个函数能够返回错误行,可以套用以下格式:create or replace procedure prc_test(参数) isv_no number;begin select no into v_no from zrp;exception when

把子存储过程中的异常处理去掉,父存储过程就能捕捉到异常了

第三行的declare删掉那段select 有问题,最后的的条件,id=3改为sid=3;正确的如下:create or replace procedure ss as s_id integer; s_name varchar2(20); s_age integer;begin begin select sid, sname, sage into s_id, s_name, s_age from student where sid = 3; exception when NO_DATA_FOUND then insert into student values (3, 'zj', 22); commit; end;end;

这种情况我遇到过,可能的原因是表A和表B中对应字段的数据值类型不同,建议检查一下.可以用EXCEPTION 来捕获这个异常,并将捕获到的异常存储在一张表里,以便查询,这样就不会中断存储过程的执行,举例如下:declare -- 其他

网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com