1.创建错误日志表:

  1. create table REP_LOGS
  2. (
  3. log_s_no NUMBER not null,
  4. log_date DATE default sysdate not null,
  5. log_type VARCHAR2(1) default 'E' not null,
  6. log_node VARCHAR2(60) not null,
  7. log_mesg VARCHAR2(300) not null
  8. );
  9.  
  10. -- Add comments to the table
  11. comment on table REP_LOGS
  12. is '系统操作日志信息表';
  13. -- Add comments to the columns
  14. comment on column REP_LOGS.log_s_no
  15. is '日志序列号 由序列SEQ_REP_LOGS生成';
  16. comment on column REP_LOGS.log_date
  17. is '日志时间';
  18. comment on column REP_LOGS.log_type
  19. is '日志类型 ''E'':异常(默认);''N'':正常;''W'':警告';
  20. comment on column REP_LOGS.log_node
  21. is '写入日志的节点';
  22. comment on column REP_LOGS.log_mesg
  23. is '详细信息';

2.创建用于向上述日志表中写数据的存储过程(独立事物)

  1. create or replace procedure p_messagelogging(str_i_logtype in varchar2,
  2. str_i_lognode in varchar2,
  3. str_i_logmesg in varchar2)
  4. /*************************************************************************
  5. ** Name : p_messagelogging
  6. ** Purpose : 记录日志
  7. *************************************************************************/
  8. is
  9. pragma autonomous_transaction;
  10. begin
  11. insert into rep_logs(log_s_no, log_type, log_node, log_mesg)
  12. values(seq_rep_logs.nextval, str_i_logtype, str_i_lognode, str_i_logmesg);
  13. commit;
  14. end p_messagelogging;

3.在存储过程中捕获异常并使用上述存储过程记录错误信息。

  1. create or replace procedure p_myproc(arg1 in number, arg2 in varchar2)
  2. is
  3. str_l_errmsg rep_logs.log_mesg%type; --异常信息
  4. str_l_errloc varchar2(30);
  5. begin
  6. str_l_errloc:='my mark 1';
  7. .....
  8. str_l_errloc:='my mark 2';
  9. exception
  10. when others then
  11. str_l_errmsg := substrb('Tips:'||str_l_errloc || '-' || sqlerrm, 1, 300);
  12. p_messagelogging('error type', 'current procedure name', str_l_errmsg);
  13. raise;
  14. end p_myproc;

通过这种方式(再配合自定义异常),可以在程序出错的时候,根据日志表查找出出错的存储过程名以及详细代码位置,特别是在存储过程嵌套调用层次很深的时候,上述处理方式会很有用,这也是ORACLE自治事物最常用的场合。

ORACLE 存储过程中保存用户自定义异常信息的一种方式的更多相关文章

  1. oracle 存储过程 变量的声明和赋值的3种方式

      oracle 存储过程 变量的声明和赋值的3种方式 CreationTime--2018年8月31日16点00分 Author:Marydon 1.声明变量的3种方式 按照数据类型的声明方式进行区 ...

  2. 程序中使用log4J打印信息的两种方式

    (1)通过org.apache.commons.logging.Log 接口实例化: public static Log log = LogFactory.getLog(String name); p ...

  3. Oracle 中记录用户登录信息

    我们可以使用 Oracle Audit 函数来记录用户登录信息,但是如果开放了 Audit 函数将会使 Oracle 性能下降,甚至导致 Oracle 崩溃.那我们如何才能记录用户登录信息呢?其实我们 ...

  4. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  5. Oracle存储过程中异步调用的实际操作步骤

    本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

  6. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  7. php使用session来保存用户登录信息

    php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...

  8. Oracle存储过程中跳出循环的写法

    注:本文来源于: <  Oracle存储过程中跳出循环的写法   > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...

  9. oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题

    oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题 学习了:http://blog.csdn.net/royzhang7/article/deta ...

随机推荐

  1. Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.java

    Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...

  2. Java的URL类(一)

    转:https://www.cnblogs.com/blackiesong/p/6182038.html Java的URL类(一) Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平 ...

  3. div嵌套,常见左右分类栏目

    最终效果图如下: html代码如下: <div class="smalItem"> <div class="leftnav"> < ...

  4. CentOS 6.8 配置防火墙,开放8080端口

    打开配置文件 sudo vim /etc/sysconfig/iptables 按下a,进入编辑 加入这一行 -A INPUT -m state --state NEW -m tcp -p tcp - ...

  5. 2018-计算机系机试(第二批)-C-数字字符个数

    C. 数字字符个数 单点时限: 1.0 sec 内存限制: 256 MB 输入一行信息,输出其中包含的数字字符个数. 例如:输入 a<4 >w,输出 1 . 输入格式 一行字符串 (可能含 ...

  6. json模块

    dic = {"name":"boke","age":"18"} #字典 data = json.dumps(dic) ...

  7. 我与java的故事

    前奏 2012年开始接触java,当时还是大二因为博客园的原因我选择了java这门语言进行深入的学习.一开始看的是<动力节点>的教学视频,请原谅我已经忘记那个讲师叫什么名字.但是的项目叫E ...

  8. AVL Tree Insertion

    Overview AVL tree is a special binary search tree, by definition, any node, its left tree height and ...

  9. HTML标记语言

    一.html的文档结构 html含义为超文本标记语言,html文档重要由4个标签来组成就是<html>  <head>  <title>  <body> ...

  10. Python Redis中Scan遇到问题

    在项目启动中需要删除redis原先相同key储存的值,所以使用scan_iter来便利相关的key,并删除. 这里需要注意两个性能问题 1. scan_iter的模糊匹配的过滤器要正确,否则会带来很多 ...