【发布时间】:2016-01-15 08:09:32
【问题描述】:
我正在阅读 Steven Feuerstein 的 PL/SQL 书籍。根据它:
当你想重新加注(或传播出去)相同的东西时使用这种形式 异常处理程序中的异常,如您在此处看到的:
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- Use common package to record all the "context" information,
-- such as error code, program name, etc.
errlog.putline (company_id_in);
-- And now propagate NO_DATA_FOUND unhandled to the enclosing block.
RAISE;
当您想要记录错误的事实时,此功能很有用 发生,但随后将相同的错误传递给封闭块。 这样,您可以记录应用程序中发生错误的位置,但 仍然停止封闭块而不会丢失错误 信息。
我试试看:
create table log_error
(
error_code number,
error_name varchar2(400)
);
declare
l_q number := 400;
l_r number := 0;
l_result number;
err_num NUMBER;
err_msg VARCHAR2(100);
begin
l_result := l_q/l_r;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 100);
insert into log_error values (err_num , err_msg);
end;
select * from log_error;
我的 log_error 表中有以下数据:
-1476 ORA-01476: 除数等于零
现在我将raise 放在我的异常块中:
declare
l_q number := 400;
l_r number := 0;
l_result number;
err_num NUMBER;
err_msg VARCHAR2(100);
begin
l_result := l_q/l_r;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 100);
insert into log_error values (err_num , err_msg);
raise;
end;
现在当我运行这个块时,我的日志表中什么也没有,而且我也得到了错误。
Error report - ORA-01476: divisor is equal to zero ORA-06512: at line 14 01476. 00000 - "divisor is equal to zero"
加薪有什么用?我什么时候必须使用这个?
【问题讨论】:
-
@LalitKumarB,原则上你是对的,但是我在这里假设 TO 尝试学习和理解一般的异常处理。