在存储过程、函数或触发器中,如何禁止Oracle某个或多个异常情态的触发?急

因为在一个包含块中,不管什么地方,只要出现异常,这个块将会立即终止,再也没有办法继续执行了。比如一条:Select ... Into 语句,如果没有找到任何行,则触发一个NO_DATA_FOUND异常,控制自动转到异常处理部分,其后的语句将无法继续执行。这并不是我想要的,我需要在Oracle控制自动跳转到转异常处理之前扑获这个错误,并可在进行处理后继续执行下面的语句,而不跳转到异常处理部分。
[208 byte] By [qiuyang_wang-小数点] at [2007-12-14]
# 1
declare
...
begin
...
begin
select ... into ...
exception
when no_data_found
...
when others
...
end;
...
end;

如上,exception被封装在一个pl/sql子块中,你就能继续执行整个块中下面的代码了。
KingSunSha-弱水三千 at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...
# 2
有没有其它的办法,因为我不能将所有的语句都做在一个子块中,而且如果写在循环内部,我需要有时候继续执行到循环末尾,有时候需要直接跳转到循环的开头,虽然我可以使用全局变量或其它标识来实现,但我还是希望能在程序内扑获异常,希望能再提供帮助。在下先谢谢了。
qiuyang_wang-小数点 at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...
# 3
只要能在你预想的范围内控制exception的处理,你就可以做自己想作的事情。若水的例子如果你能理解的话,就能解决你的问题了!
farspeed-farspeed at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...
# 4
给你一个异常处理的例子
DECLARE
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
BEGIN
/* Code which processes some data here */
NULL;
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) /*保存到log表中*/
VALUES (v_ErrorCode, v_ErrorMsg, v_Information);
END;
/
把它放到必要的位置就可以
bzszp-SongZip at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...
# 5
如果想在程序中途截获异常并作相应的处理,只能使用这种办法

因为你的问题不是别的,而是——exception!!
xinpingf-白开心 at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...
# 6
虽然我的问题没有彻底解决,也可能永远都解决不了,但为了报答各位对我的厚爱与关心,在下拟定了一个分配原则,希望感到不公的朋友能够谅解。
qiuyang_wang-小数点 at 2007-10-22 > top of Msdn China Tech,其他数据库开发,SQL Anywhere Studio...