存储过程异常的信息
⑴ 请教各位高手 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 存储过程发生异常错误执行的exception有日志记录么
一般我们会创建一张表用于记录所有异常信息,再写一个过程来处理(截取部分信息)并存储异常信息(包括发生异常的过程、触发器名称、异常信息、发生时间等),然后在整个数据库开发中,所有异常处理中调用该过程。这样可以随时查看那里出了问题。
⑶ 如何获取存储过程中的错误信息
FUNCTION mysql_error does NOT exist,不行呀,哪个知道怎么弄
⑷ oracle存储过程异常信息
begin
[sql code]
exception
when others then
rollback;
v_err:=sqlerrm; --这里接收异常信息
end;
⑸ 如何在sqlserver 的函数或存储过程中抛出异常。
try...catch
⑹ mysql存储过程怎么获取异常信息
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错误代码也不被支持。
例:
delimiter $$
CREATE TABLE `_t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`val1` varchar(20) DEFAULT NULL,
`val2` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=113 DEFAULT CHARSET=latin1$$
DELIMITER $$
CREATE DEFINER=`abandonship`@`%` PROCEDURE `P_TestException`()
BEGIN
declare _var,_err int default 0;
⑺ plsql怎么看存储过程的错误(信息)日志
右键test,对存储过程进行测试!可以用变量记录错误信息,用异常捕捉来报告这个变量里记录的错误信息。
当然,也可以使用自己的错误日志表来记录具体错误原因,错误代码,方便查找错误原因。
⑻ 如何让存储过程抛出异常
你说的异常是什么意思?如果是,执行中的错误,那么可以用“调试”,不过需要有一个系统权限的拥护才能调试,权限好象是什么debug XXXXX。 如果说的是有时执行因为这样那样的数据问题出现的异常,那么一般都是通过exception来抛出异常的,这样的抛出的异常,你可以自己编代码,然后输入一张表内,这样就可以捕获异常了。如果1表示没有主键,2表示数据超长等等。具体的写法网上很多,这里就不写了。
⑼ oracle存储过程,如何获得详细的错误信息
create or replace procere proc_test( strAge in string, strName in string, ret_code out string, v_error_message out string) is
begin
declare
strsql varcchar(1024);
v_error_desc varcchar(1024);
begin
v_error_desc :='student';
strsql :='select name from student where age=100';
execute immediate strsql using strAge ;
v_error_desc :='teacher';
strsql :='select age from teacher where name=jill';
execute immediate strsql using strName ;
ret_code:=0;
v_error_desc :='OK';
v_error_message:='OK';
EXCEPTION
WHEN OTHERS THEN
ret_code := sqlcode;
v_error_desc := '错误位置:' || v_error_desc;
v_error_message := sqlerrm;
rollback;
end;
end proc_cancel_digital_id;
⑽ oracle 存储过程异常处理
先建一个错误跟踪表
create sequence s_error_id;
CREATE TABLE ERROR_RECORD
(
ERROR_ID NUMBER(10) primary key,
ERROR_CODE NUMBER(10),
ERROR_MSG VARCHAR2(2000),
ERROR_DATE DATE,
ERROR_PROGRAM VARCHAR2(200)
);
--------在过程的例外里向跟踪表写入错误信息:
create or replace procere day_task is
v_sqlcode ERROR_RECORD.ERROR_CODE%type;
v_msg ERROR_RECORD.error_msg%type;
begin
------program body
exception when others then
--记录错误信息表
v_sqlcode :=sqlcode;
v_msg :=sqlerrm;
insert into error_record(error_code,error_msg,error_date,error_program)
values (v_sqlcode,v_msg,sysdate,‘day_task’);
end;