一段通用的錯誤處理的例子(把錯誤寫到了的自己建立的記錄錯誤的日志表里面):
EXCEPTION
WHEN OTHERS THEN
-- Assign values to the log variables, using built-in
-- functions.
v_ErrorCode := SQLCODE;
v_ErrorMsg := SQLERRM;
v_CurrentUser := USER;
v_Information := 'Error encountered on ' ||
TO_CHAR(SYSDATE) || ' by database user ' || v_CurrentUser;
-- Insert the log message into log_table.
INSERT INTO log_table (code, message, info)
VALUES (v_ErrorCode, v_ErrorMsg, v_Information);
EXCEPTION
WHEN OTHERS THEN
-- Assign values to the log variables, using built-in
-- functions.
v_ErrorCode := SQLCODE;
v_ErrorMsg := SQLERRM;
v_CurrentUser := USER;
v_Information := 'Error encountered on ' ||
TO_CHAR(SYSDATE) || ' by database user ' || v_CurrentUser;
-- Insert the log message into log_table.
INSERT INTO log_table (code, message, info)
VALUES (v_ErrorCode, v_ErrorMsg, v_Information);
解决方案 »
- 求一条 sql
- java.sql.SQLException: Io 异常: Size Data Unit (SDU) mismatch
- 问建库流程
- 如何使得这样的文本可以模糊匹配一系列字符串中的一个?
- 遇到的数据库设计与开发方面棘手的问题
- 9.01升级到9.02或更高版本
- 一个关于“oracle事务处理”的严重问题,请哥哥们帮忙,急。。。。。。。。。。。。
- 如何在sql server 中实现oracle 的start with 功能?
- asp连接oracle时0x80004005错误,急,在线等!
- oracle 存储过程 游标 数据
- 谁能告诉我怎样一步一步搭建ORACLE服务器?谢谢!
- 向高手们请教几个问题,关于存储过程和sql语句,谢谢!!!!!
v_ErrorCode NUMBER; -- Code for the error
v_ErrorMsg VARCHAR2(200); -- Message text for the error
v_CurrentUser VARCHAR2(8); -- Current database user
v_Information VARCHAR2(100); -- Information about the error
commit;
--错误处理
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
--插入日志
insert into aaaa(aaaa,bbbb) values ('ss','ss01');提示:
出现符号“excaption”需要其中之一 begin、declare、end 、for、goto
错误处理
BEGIN
。
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
--插入日志
insert into aaaa(aaaa,bbbb) values ('ss','ss01');
END;
加上这个END就OK了。异常处理的一般格式如:
BEGIN
.........
EXCEPTION
WHEN OTHERS THEN
null;
END;
我怎么一出现错误就插入log 1万多条数据
真让人受不了 while cur_equlas_openup%found loop
begin
insert into zwdjdxg z(z.djbh,z.gxcs,z.workerid,z.ywlbid,z.mid,
z.dhhm,z.dhkh,z.blrq,z.dbr,z.dbrzjhm,
z.dbrlxdh,z.dbrzjlxid,z.removetag,z.destroytime,z.tradetypecode,z.deptid,
z.khmc,z.zjlxid,z.zjhm,z.txdz,z.yzbm,z.lxdh1,z.lxr,
z.tclxid) values(
bcustomerid,'99','8888','WXGH','SH002',
bmphonecode,bsimcardno,bopendate,bassurename,bassurepid,
bassurelink,bassuretypecode,bremovetag,bdestroytime,btradetypecode,bdepartid,
ausrname,apassporttypecode,ausrpid,ausraddress,apostcode,alinkhomephone,alinkman,
cfeesetcode
);
commit;
EXCEPTION
WHEN OTHERS THEN
begin
-- Assign values to the log variables, using built-in
-- functions.
v_ErrorCode := SQLCODE;
v_ErrorMsg := SQLERRM;
v_CurrentUser := USER;
v_Information := 'Error encountered on ' ||
TO_CHAR(SYSDATE) || ' by database user ' || v_CurrentUser;
-- Insert the log message into log_table.
INSERT INTO log l (l.workerid,l.czrq,l.funcid,l.actor,l.operate)
VALUES ('8888',sysdate,v_ErrorCode||'导入数据','导入数据',bcustomerid||'v_ErrorMsg');
commit;
end;
end;
end loop;
我怎么一出现错误就插入log 1万多条数据你的异常处理都没有做什么动作,除了INSERT,没有RETURN或goto之类的
语句,肯定是报错了INSERT然后返回循环
begin
EXCEPTION
--begin(这个begin块我觉得没有必要)
WHEN OTHERS THEN
....插入你的异常表
--end(这个begin块我觉得没有必要)
end;
3。你的意思是不是同一个记录在异常表中插入很多次?我怀疑你的过程没有循环出来。
看你的过程,因为你用的是fetch,用了%found loop,在过程的end loop前却没有取第二条数据的语句,即缺少fetch语句。另外,好像cursor用过了没有关闭啊。close cursor。我能看到的就这么多,楼主看看吧。:)