热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号?

Q ? ? ? ? ?题目 在Oracle数据库中,如何捕获存储过程中出现异常的行号?? ? ?A ? ? ? ? ?答案 ? ? ? ? ?使用函数DBMS_UTILITY.FORM

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片


Q
? ? ? ? ?题目

 

在Oracle数据库中,如何捕获存储过程中出现异常的行号?




? ? ?
A
? ? ? ? ?答案
? ? ? ? ?


使用函数DBMS_UTILITY.FORMAT_ERROR_BACKTRACE可以获取到出现异常时候的程序的行号,而函数DBMS_UTILITY.FORMAT_ERROR_STACK可以获取到出现异常时的错误信息,作用和SQLERRM一样。示例如下所示所示:

SYS@lhrdb> SET SERVEROUTPUT ON

SYS@lhrdb> DECLARE

  2    N1 VARCHAR(10);

  3  BEGIN

  4    SELECT ENAME INTO N1 FROM SCOTT.EMP WHERE EMPNO = 2;

  5  EXCEPTION

  6    WHEN OTHERS THEN

  7      DBMS_OUTPUT.PUT_LINE('-------------------------------------');

  8      DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));

  9      DBMS_OUTPUT.PUT_LINE('-------------------------------------');

 10      DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

 11      DBMS_OUTPUT.PUT_LINE('-------------------------------------');

 12      DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);

 13      DBMS_OUTPUT.PUT_LINE('-------------------------------------');

 14      DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_CALL_STACK);

 15  END;

 16  /

-------------------------------------

ORA-01403: no data found

-------------------------------------

ORA-06512: at line 4

-------------------------------------

ORA-01403: no data found

-------------------------------------

----- PL/SQL Call Stack -----

  object           line       object

  handle           number     name

70001005a555eb8    14      anonymous block

PL/SQL procedure successfully completed.

根据“ORA-06512: at line 4”可以很容易的获取到错误的行号。所以,很多有经验的程序员都会在经常运行的存储过程或包中加入异常捕获,而在异常捕获中将错误信息记录在一个日志表中。如下所示:

DECLARE

  N1 VARCHAR(10);

  V_ERROR VARCHAR(4000);

BEGIN

&#160;&#160;SELECT ENAME INTO N1 FROM SCOTT.EMP WHERE ROWNUM<0; --报错:ORA-01403: no data found

EXCEPTION

&#160;&#160;WHEN OTHERS THEN

&#160;&#160;&#160;&#160;V_ERROR := SQLCODE || &#39;,&#39; || SQLERRM || CHR(13) ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;

&#160;&#160;&#160;P_INSERT_LOG(V_ERROR);--记录日志的存储过程

END;

/




【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片


DB笔试面试历史连接
?

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片

About Me:小麦苗
? ? ?

●&#160;本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

●&#160;本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

●&#160;版权所有,欢迎分享本文,转载请保留出处

●&#160;QQ:646634621 &#160;QQ群:618766405

●&#160;题目解答若有不当之处,还望各位朋友批评指正,共同进步

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片

【DB笔试面试357】在Oracle数据库中,如何捕获存储过程中出现异常的行号? - 文章图片



本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
ngdongran_638070
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有