当前位置:首页 » 存储配置 » 存储过程捕获异常

存储过程捕获异常

发布时间: 2022-07-18 01:42:45

㈠ MYsql 存储过程 中怎么捕获异常

DECLARE处理程序的使用:

DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement

其中,

handler_type的取值范围:CONTINUE | EXIT | UNDO

condition_value的取值范围:SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code

这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。对一个CONTINUE处理程序,当前子程序的执行在执行处理程序语句之后继续。对于EXIT处理程序,当前BEGIN...END复合语句的执行被终止。UNDO 处理程序类型语句还不被支持。

· SQLWARNING是对所有以01开头的SQLSTATE代码的速记。

· NOT FOUND是对所有以02开头的SQLSTATE代码的速记。

· SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。

注:除了SQLSTATE值,MySQL错误代码也不被支持。


例:

[sql]viewplainprint?
delimiter$$

CREATETABLE`_t1`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`val1`varchar(20)DEFAULTNULL,
`val2`int(11)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=113DEFAULTCHARSET=latin1$$
[sql]viewplainprint?
DELIMITER$$

CREATEDEFINER=`abandonship`@`%`PROCEDURE`P_TestException`()
BEGIN
declare_var,_errintdefault0;
,sqlwarning,notfoundset_err=1;
insertinto_t1(val1,val2)value(2012,'abandonship');
if_err=1then
set_var=2;
endif;

selectcasewhen_var=2then'出错了'else_varend;

调用该存储过程将返回:出错了

㈡ db2如何捕获存储过程异常

TRUNCATETABLEoutput_debugIMMEDIATE@
BEGIN
--DB2中,如果需要使用sqlcode,那么必须先DECLARE以后,才能使用。
DECLAREsqlcodeINT;
P1:BEGINATOMIC
--定义错误处理
--如果发生错误,结束处理,并回滚前面做的处理。
DECLAREUNDOHANDLER
FOR
SQLEXCEPTION
BEGIN
--异常处理
INSERTINTOoutput_debugVALUES('出错啦!'||TO_CHAR(sqlcode));
END;
--先更新.
UPDATEtest_mainSETvalue='Test3'WHEREid=1;
--插入一行主键重复数据.
INSERTINTOtest_mainVALUES(1,'PK');
INSERTINTOoutput_debugVALUES('本语句不会执行到!');
ENDP1;
END
@
db2=>select*fromtest_mainWHEREid=1@
IDVALUE
---------------------
1Test2
1条记录已选择。
db2=>select*fromoutput_debug@
DATA
----------------------------------------
出错啦!-803

㈢ 请教各位高手 oracle 存储过程 如何获得 捕获异常的内容

--通过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 VARCHAR2(200); -- Variable to hold the error message text

BEGIN
--...
--抛出异常
IF ( ... ) THEN --(括号内填抛出异常的条件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉异常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他异常,并获得 捕获异常的内容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.

dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/

/**
sqlcode 就是错误代码
sqlerrm 就是sql错误信息。注意用substr来截取,否则输出很难看。

**/

㈣ oracle 存储过程如何捕获特定异常

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

㈤ 请教各位高手 oracle 存储过程 如何将获得捕获异常的内容写入一张表里

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

create or replace procere p_testone is
v number(2);
v_sqlcode number;
v_sqlerrm varchar2(4000);
begin
select 1 / 0 into v from al;

--异常处理
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_sqlcode :=sqlcode;
v_sqlerrm :=SUBSTR(sqlerrm, 1, 2000);
insert into t_log_error values(1,sysdate,v_sqlcode,v_sqlerrm);
commit;
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
end;

执行存储过程后就可以把异常信息记录到表t_log_error了。

㈥ 求助,存储过程如何捕获异常后继续执行,

这个要看异常捕捉处理程序放在哪,从出现异常到异常处理之间的程序应该是不执行的

㈦ 存储过程怎么捕捉违反唯一性约束的异常

BEGIN TRY---------------------开始捕捉异常
...
END TRY-----------结束捕捉异常
BEGIN CATCH------------有异常被捕获
-----------异常处理,一般有事务先回滚
IF @@TRANCOUNT > 0---------------判断有没有事务
BEGIN
ROLLBACK TRAN----------回滚事务
END
....
END CATCH--------结束异常处理

㈧ 怎样判断存储过程出错并捕捉错误信息

--通过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 VARCHAR2(200); -- Variable to hold the error message text

BEGIN
--...
--抛出异常
IF ( ... ) THEN --(括号内填抛出异常的条件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉异常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他异常,并获得 捕获异常的内容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.

dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/

/**
sqlcode 就是错误代码
sqlerrm 就是sql错误信息。注意用substr来截取,否则输出很难看。

**/

㈨ 如何让存储过程抛出异常

你说的异常是什么意思?如果是,执行中的错误,那么可以用“调试”,不过需要有一个系统权限的拥护才能调试,权限好象是什么debug XXXXX。 如果说的是有时执行因为这样那样的数据问题出现的异常,那么一般都是通过exception来抛出异常的,这样的抛出的异常,你可以自己编代码,然后输入一张表内,这样就可以捕获异常了。如果1表示没有主键,2表示数据超长等等。具体的写法网上很多,这里就不写了。

热点内容
创建实例在linux 发布:2024-10-07 18:03:16 浏览:485
黑客学c语言 发布:2024-10-07 17:37:39 浏览:942
ftp比较文件 发布:2024-10-07 17:04:56 浏览:39
如何配置幼儿园园内的玩具 发布:2024-10-07 17:04:23 浏览:863
干支日算法 发布:2024-10-07 16:47:17 浏览:502
sqlin语句用法 发布:2024-10-07 16:45:05 浏览:640
直出服务器怎么样 发布:2024-10-07 15:41:36 浏览:479
比亚迪唐dmi哪个配置性价比 发布:2024-10-07 15:19:28 浏览:903
编译器按变量 发布:2024-10-07 15:07:03 浏览:775
怎么忘记电脑wifi密码怎么办 发布:2024-10-07 15:02:18 浏览:426