oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之异常处理

平时用来测试的异常处理

我们都是通过dbms_output.put_line来输出异常信息,但是在实际的应用中,需要把异常信息返回给调用的客户端。

其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)

raise_application_error(异常类型,传递信息)

异常类型:number 值域:-20000 到-20999

传递信息:varchar2(2000)

DBMS_STANDARD包的RAISE_APPLICATION_ERROR过程,可以重新定义异常错误消息,它为应用程序提供了一种与ORACLE交互的方法。语法如下

RAISE_APPLICATION_ERROR(errorNumber,errorString)

errorNumber是数值在-20000到-20999之间,errorString为自定义的错误信息。

如:

update jobs set job_title = v_newJobTitle where job_id = v_jobid;

if sql%notfound then

RAISE_APPLICATION_ERROR(-20167,'update failure!');

end if;

..........

当在sqlpus中测试时,一旦没有要更新的行,则抛出这样的异常:

ORA-20167: update failure!

oracle的异常分为编译时异常(错误)和运行时异常,前者不能被处理,后者可以被处理。

我们主要讨论运行时异常。

异常类型:

a、预定义异常

已命名的预定义异常有CURSOR_ALREADY_OPEN、INVALID_NUMBER、TOO_MANY_ROWS等

b、用户定义异常

c、已命名异常(已命名异常不能单独归为一类异常,但它有点特别,所以我将它单独罗列说明)

如果希望处理一个异常(被when子串处理),那么异常必须有一个名字,如TOO_MANY_ROWS;

数据库错误有数千个,但是只有不到25个是内建的已命名异常(这些异常都声明在standard包中);

要处理那些未命名的异常时,你可以将一个名字和一个错误号联系在一起,达到这个目的的语句是pragma exception_init语句;

抛出异常:

a、通过pl/sql运行时引擎

当数据库或pl/sql在运行时发生错误时,一个异常被pl/sql运行时引擎自动抛出

b、使用raise语句

异常也可以通过raise语句抛出:raise exception_name;

c、调用raise_application_error存储过程

处理异常&异常传播:

a、一旦程序进入异常部分就不能再回到同一块的执行部分;当异常被处理后,控制返回到外层执行部分的下一条语句;

b、如果有when others子串,则必须放置在最后面作为缺省处理器处理没有显式处理的异常;

c、执行部分抛出的异常将首先传递到同一块的异常部分,如果在同一块的异常部分没有处理这个异常的处理器,那么异常将会传播到上一层的异常部分中,一直到最外层;

d、异常被处理后如果你仍然希望它继续传播,可以在异常处理的最后执行不带参数的raise语句(raise语句将重新抛出出现的异常,允许它继续传播);

--这是一个上面部分知识点的示例(伪代码)说明

declare

...

user_define_exception exception; --用户定义异常

invalid_column_name exception;

--补充说明:如果我们在程序块中使用了无效列名,会有括号中的错误提示(ORA-00904:invalid column name)

--下面我们将这个异常代码号与我们自定义的异常进行关联,即为异常命名

pragma exception_init(invalid_column_name,-904);

begin

...

--raise user_define_exception; --可以显式引发异常

exception

when TOO_MANY_ROWS then --预定义异常处理

...;

when user_define_exception then --用户定义异常处理

...;

when invalid_column_name then --PRAGMA EXCEPTION_INIT异常处理

...;

raise; --继续传播该异常

end;

sqlcode和sqlerrm:

a、另外一种处理数据库错误的方法是使用内建函数sqlcode和sqlerrm;

b、sqlcode将返回现行数据库错误号,这些错误号中除了no_data_found是+100外其他都是负数;

c、sqlerrm返回文本描述的错误信息;

d、为了获得用户自定义异常返回的sqlerrm和sqlcode,你需要使用raise_application_error函数给自定义异常标注错误号

给自定义错误标注号码:

a、raise_application_error内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息;

b、自定义异常的缺省错误号是+1,缺省信息是user_defined_exception。来自未处理的异常的一般信息对于识别导致错误的原因没有帮助,

c、raise_application_error函数能够在pl/sql程序块的执行部分和异常部分调用,显式抛出带特殊错误号的命名异常;

d、使用语法:raise_application_error(error_no,error_message[,{true|| false}]);

e、错误号的范围是-20,001到-20,999;错误信息是文本字符串,最多为2048字节;true和false表示是添加(true)进错误堆(error stack)还是覆盖(overwrite)错误堆(false)。缺省情况下是false。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融信息交换协议

随着网络的使用,目前所有大型的金融机构都已经实现了自动化和数字化。当中肯定少不了互联网的加入,那么在这当中,我们主要介绍一下FIX协议。它是由国际FIX协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程&#xff0…

2018大数据学习路线从入门到精通

最近很多人问小编现在学习大数据这么多,他们都是如何学习的呢。很多初学者在萌生向大数据方向发展的想法之后,不免产生一些疑问,应该怎样入门?应该学习哪些技术?学习路线又是什么?今天小编特意为大家整理了…

相似邻里算法_纽约市-邻里之战

相似邻里算法IBM Data Science Capstone ProjectIBM Data Science Capstone项目 分析和可视化与服装店投资者的要求有关的纽约市结构 (Analyzing and visualizing the structure of New York City in relation to the requirements of a Clothing Store Investor) 介绍 (Introd…

一、面向对象

第一节:面向对象编程1.面向对象三大原则:封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承:继承,指可以让某个类型的对…

[poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]

题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 sini 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差分约束, 就是 即 Si 为第 i 项的前缀和, 特别的 So 为0. 转化不等式(连续子段和变为前缀和之差 > < 变为 &g…

linux质控命令,Linux下microRNA质控-cutadapt安装

如果Linux系统已安装pip或conda&#xff0c;cutadapt的安装相对简便一些&#xff0c;示例如下&#xff1a;1.pip安装pip install --user --upgrade cutadapt添加环境变量echo export PATH$PATH:/your path/cutadapt-1.10/bin >> ~/.bashrc2.conda安装conda install -c b…

采用多播传送FIX行情数据的推荐方案

理由FIX协议由一个会话层协议&#xff0c;一个应用层协议和一套域数据字典组成。后两者不依赖于FIX会话。而且&#xff0c;由于FIX会话作为Point-to-point&#xff08;点-对-点&#xff09;通信&#xff0c;并不适合于发布/订阅模式&#xff08;如为大量接收者提供市场数据&…

AJAX 异步加载技术

AJAX 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。 传统的网页&#xff08;不使用 AJAX…

linux分辨率和用户有关吗,Linux系统在高分屏非正常分辨率显示

问题描述&#xff1a;win10重装为Ubuntu16.04&#xff0c;在1920x1080的显示屏上&#xff0c;linux系统分辨率只有800x600xrandr # 查看当前显示分辨率#输出&#xff1a;[Screen 0: minimum 800 x 600, current 800 x 600, maximum 800 x 600]可以看出显示屏最小为800x600&…

数据透视表和数据交叉表_数据透视表的数据提取

数据透视表和数据交叉表Consider the data of healthcare drugs as provided in the excel sheet. The concept of pivot tables in python allows you to extract the significance from a large detailed dataset. A pivot table helps in tracking only the required inform…

金融信息交换协议(FIX)v5.0

1. 什么是FIXFinancial Information eXchange(FIX)金融信息交换协议的制定是由多个致力于提升其相互间交易流程效率的金融机构和经纪商于1992年共同发起。这些企业把他们及他们的行业视为一个整体&#xff0c;认为能够从对交易指示&#xff0c;交易指令及交易执行的高效电子数…

观光公交

【问题描述】 风景迷人的小城 Y 市&#xff0c;拥有 n 个美丽的景点。由于慕名而来的游客越来越多&#xff0c;Y 市特意安排了一辆观光公交车&#xff0c;为游客提供更便捷的交通服务。观光公交车在第 0 分钟出现在 1 号景点&#xff0c;随后依次前往 2、3、4……n 号景点。从…

linux行命令测网速,Linux命令行测试网速的方法

最近给服务器调整了互联网带宽的限速策略&#xff0c;调到100M让自己网站也爽一下。一般在windows上我喜欢用speedtest.net来测试&#xff0c;测速结果也被大家认可。在linux上speedtest.net提供了一个命令行工具speedtest-cli&#xff0c;用起来很方便&#xff0c;这里分享一下…

Delphi XE2获取汉字拼音首字母

function CnPYIndex(const CnString: string): string;{ 返回中文的拼音首字母}const ChinaCode: array[0..25, 0..1] of Integer ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), …

图像处理傅里叶变换图像变化_傅里叶变换和图像床单视图。

图像处理傅里叶变换图像变化What do Fourier Transforms do? What do the Fourier modes represent? Why are Fourier Transforms notoriously popular for data compression? These are the questions this article aims to address using an interesting analogy to repre…

HDUOJ 1062 TEXT REVERSE

#include<iostream> #include<stdlib.h> #include <iomanip> #include<stack> using namespace std;int main(){//次数int n 0;while (cin >> n) {//这里需要读一个字符&#xff0c;需要消除换行符的影响getchar();while (n--) {char c;stack&l…

VC++的windows服务

项目建立&#xff1a; VS2008->ATL项目->服务exe 服务部署&#xff1a; 在VS2008中新建的ATL项目&#xff0c;在网上看到的流程中都会有注册服务这一项。 但是对服务的注册都是只给了一个指令&#xff0c;一句话带过&#xff0c;没有给出具体的操作步骤 经过多次试验…

linux中gradle编译慢,【Linux】解决linux下android studio用gradle构建从jcenter或maven下载依赖太慢...

一个简单的办法&#xff0c;修改项目根目录下的build.gradle&#xff0c;将jcenter()或者mavenCentral()替换掉即可&#xff1a;allprojects {repositories {maven{ url http://maven.oschina.net/content/groups/public/}}}但如果你有很多个项目的话&#xff0c;一个一个的改估…

MFC程序需要的函数库及头文件--《深入浅出MFC》

Windows程序调用的函数可分为2部分&#xff1a;C Runtimes Windows API。 C Runtimes&#xff1a; LIBC.LIB -- C Runtime函数库的静态链接版本 MSVSRT.LIB--C Runtime库的动态链接版本&#xff08;如果要链接这一函数&#xff0c;你的程序执行时必须有MSVCRT40.DLL在场&#…

C#DNS域名解析工具(DnsLookup)

C#DNS域名解析工具(DnsLookup) DNS域名解析工具&#xff1a;DnsLookup 输入域名后点击Resolve按钮即可。 主要实现代码如下&#xff1a; private void btnResolve_Click ( object sender, EventArgs e ) {lstIPs.Items.Clear ( ); //首先把结果里的ListBox清空 try {IPHostE…