当前位置:首页 » 存储配置 » oracle存储过程自定义异常

oracle存储过程自定义异常

发布时间: 2024-09-07 18:03:46

⑴ 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;

⑵ oracle警告:创建的存储过程带有编译错误

第一个exeception1写错了;
第二个,oracle没有else if只有elsif;
第三个:多了一个end if;
最后一个,输出的时候后面的";"应该改为英文分号

⑶ oracle 存储过程,请问这样的一个存储过程执行中其中一条语句报错,接下来的语句还会执行吗

不会,直接抛出异常,并终止。存储过程是预编译sql的,主题出错会导致整个存储过程执行失败。

⑷ Oracle 定义存储过程不能执行怎么办

无效状态有两种可能:

1、一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。

⑸ 请教各位高手 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存储过程怎么判断一条sql语句是否成功

oracle存储过程判断一条sql语句是否成功的方法是增加exception处理,如果没有抛出exception,那就证明正常执行了。

在Oracle中,异常分为以下两类:

Oracle预定义异常

用户自定义异常

在Oracle中预定义的异常如下表所示:

在Oracle中有以下三种方式触发异常:

  • 由Oracle自动触发异常

  • 使用RAISE语句手工触发

  • 调用存储过程RAISE_APPLICATION_ERROR手工触发

代码将演示Oracle自动触发异常:

-- Created on 2015-7-14 by JellyThink
declare
iA NUMBER(2) := 10;
begin
iA := iA / 0; -- Oracle自动触发异常
dbms_output.put_line(iA);
exception
when ZERO_DIVIDE then
dbms_output.put_line('Error Code:' || SQLCODE || ' ' || SQLERRM);
when others then
dbms_output.put_line('Others Exception');
end;

⑺ 请教各位高手 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了。

热点内容
linux分割行 发布:2024-11-24 22:11:02 浏览:576
获取ftp文件 发布:2024-11-24 21:54:20 浏览:520
资源平滑算法 发布:2024-11-24 21:54:18 浏览:57
vs和vc编译器哪个好使 发布:2024-11-24 21:54:07 浏览:804
爱课程适用于什么安卓系统 发布:2024-11-24 21:54:02 浏览:38
51单片机编译 发布:2024-11-24 21:50:05 浏览:366
android常用的工具类 发布:2024-11-24 21:42:25 浏览:48
用户管理源码 发布:2024-11-24 21:29:36 浏览:677
监控怎么配置路由器 发布:2024-11-24 21:29:27 浏览:455
小型编译器的实现 发布:2024-11-24 21:27:48 浏览:999