sql数据导入错误代码: 0x80004005_PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR...

051ac36f1aec8f4abe205ebd42fc5970.png

抛出异常

Oracle有三种类型的异常错误:

1. 预定义(Predefined)异常

ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。

2. 非预定义(Predefined)异常

即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。

3. 用户定义(User_define)异常

程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。

在PL/SQL中有三种方式抛出异常

通过PL/SQL运行时引擎——抛出Oracle异常

使用RAISE语句——抛出用户定义异常

调用RAISE_APPLICATION_ERROR存储过程——抛出用户定义异常

非预定义异常

因为非预定义异常只有编号,没有名称,所以不能直接处理。

1、在PL/SQL 块的定义部分定义异常情况:

<异常情况> EXCEPTION;

2、将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句:

PRAGMA EXCEPTION_INIT(<异常情况>, <错误代码>);

3、在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。

INSERT INTO departments VALUES(50, 'FINANCE', 'CHICAGO');

DECLARE

v_deptno departments.department_id%TYPE := &deptno;

deptno_remaining EXCEPTION; --1、定义异常

PRAGMA EXCEPTION_INIT(deptno_remaining, -2292); --2、关联

-- -2292 是违反一致性约束的错误代码

BEGIN

DELETE FROM departments WHERE department_id = v_deptno;

EXCEPTION

WHEN deptno_remaining THEN --3、处理

DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);

END;

用户自定义异常处理

用户定义的异常错误是通过显式使用 RAISE 语句来触发。

1、在PL/SQL 块的定义部分定义异常情况 ;

2、RAISE <异常情况>;

3、在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。

DECLARE

v_empno employees.employee_id%TYPE :=&empno;

no_result EXCEPTION; --1、定义

BEGIN

UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;

IF SQL%NOTFOUND THEN

RAISE no_result; --2、抛出

END IF;

EXCEPTION

WHEN no_result THEN --3、处理

DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);

END;

RAISE_APPLICATION_ERROR

调用DBMS_STANDARD(ORACLE提供的包)包所定义的RAISE_APPLICATION_ERROR过程,可以重新定义异常错误消息,将应用程序专有的错误从服务器端转达到客户端应用程序。它为应用程序提供了一种与ORACLE交互的方法。

语法如下:

RAISE_APPLICATION_ERROR(error_number, error_message, [keep_errors] );

error_number 是从 –20,000 到 –20,999 之间的参数,这样就不会与 ORACLE 的任何错误代码发生冲突

error_message 是相应的提示信息(< 2048 字节),

keep_errors 为可选,如果keep_errors =TRUE ,则新错误将被添加到已经引发的错误列表中。如果keep_errors=FALSE(缺省),则新错误将替换当前的错误列表。

There are two uses for RAISE_APPLICATION_ERROR.

The first is to replace generic Oracle exception messages with our own, more meaningful messages.

The second is to create exception conditions of our own, when Oracle would not throw them.

create or replace procedure new_emp

( p_name in emp.ename%type

, p_sal in emp.sal%type

, p_job in emp.job%type

, p_dept in emp.deptno%type

, p_mgr in emp.mgr%type

, p_hired in emp.hiredate%type := sysdate )

is

invalid_manager exception; --1、定义

PRAGMA EXCEPTION_INIT(invalid_manager, -2291); --2、关联

dummy varchar2(1);

begin

if trunc(p_hired) > trunc(sysdate)

then

raise_application_error

(-20000, 'NEW_EMP::hiredate cannot be in the future'); --3、抛出自定义异常

end if;

insert into emp

( ename

, sal

, job

, deptno

, mgr

, hiredate )

values

( p_name

, p_sal

, p_job

, p_dept

, p_mgr

, trunc(p_hired) );

exception

when dup_val_on_index then

raise_application_error

(-20001, 'NEW_EMP::employee called '||p_name||' already exists', true); --3、包装Oracle异常

when invalid_manager then

raise_application_error

(-20002, 'NEW_EMP::'||p_mgr ||' is not a valid manager'); --3、包装自定义异常

end;

/

客户端调用时会提示详细异常信息:

-- 测试RAISE_APPLICATION_ERROR自定义异常

SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate+1)

BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate+1); END;

*

ERROR at line 1:

ORA-20000: NEW_EMP::hiredate cannot be in the future --ORA-20000

ORA-06512: at "APC.NEW_EMP", line 16

ORA-06512: at line 1

-- 测试RAISE_APPLICATION_ERROR包装自定义异常

SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 8888, sysdate)

BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 8888, sysdate); END;

*

ERROR at line 1:

ORA-20002: NEW_EMP::8888 is not a valid manager

ORA-06512: at "APC.NEW_EMP", line 42

ORA-06512: at line 1

-- 测试RAISE_APPLICATION_ERROR包装Oracle异常

SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate)

PL/SQL procedure successfully completed.

SQL>

SQL> exec new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate)

BEGIN new_emp ('DUGGAN', 2500, 'SALES', 10, 7782, sysdate); END;

*

ERROR at line 1:

ORA-20001: NEW_EMP::employee called DUGGAN already exists

ORA-06512: at "APC.NEW_EMP", line 37

ORA-00001: unique constraint (APC.EMP_UK) violated --同时打印原始堆栈

ORA-06512: at line 1

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

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

相关文章

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

【转】作者&#xff1a;xwdreamer 出处&#xff1a;http://www.cnblogs.com/xwdreamer 对于指针和常量&#xff0c;有以下三种形式都是正确的&#xff1a; const char * myPtr &char_A;//指向常量的指针 char * const myPtr &char_A;//常量的指针 const char * con…

Oracle能用什么软件访问,使用工具访问ORACLE数据库(一)

常用的数据库工具 sqlplus保证你的实例是启动的&#xff1a;ps -elf |grep ora_ |grep -v grep&#xff0c;可以查看出已经启动的oracle进程发现很多ora_smon_orcl 名字&#xff1a;ora_进程名字_实例名字如何启动oracle实例export ORACLE_SIDorcl 指定登陆实例的名字叫o…

解决NTKO Office中文文件名保存到服务器时出现乱码的问题

再使用NTKO office控件时&#xff0c;在ntko往服务器提交文件时&#xff0c;中文文件名会出现乱码的问题&#xff01; 其实解决这个问题可以换一种思路&#xff0c;在ntko往服务器提交文件时英文肯定是不会出现乱码的问题的&#xff01; 那么想办法把中文文件名转换成英文放到隐…

python手势识别隐马尔可夫模型_使用隐马尔可夫模型的运动笔迹手势识别.doc

您所在位置&#xff1a;网站首页 > 海量文档&nbsp>&nbsp高等教育&nbsp>&nbsp科普读物使用隐马尔可夫模型的运动笔迹手势识别.doc10页本文档一共被下载&#xff1a;次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性…

oracle连接数增加无法释放,Oracle连接数过多释放机制

在开发时&#xff0c;调试程序需要不断的连接数据库&#xff0c;这时到时Oracle服务器连接数过多会当掉&#xff0c;把连接数过多的客户机网线拔出后&#xff0c;在远程Oracle上依然还会保留此用户的连接数&#xff0c;久久不能释放&#xff0c;上网查了下可以以下面方法解决。…

腾讯视频过滤广告简略办法

转载于:https://www.cnblogs.com/rgqancy/articles/5485409.html

can总线一帧多少字节多少位_CAN总线过载帧及数据帧详解

CAN&#xff1a;Controller Area Network&#xff0c;控制器局域网是一种能有效支持分布式控制和实时控制的串行通讯网络。本文首先介绍了CAN总线系统结构及数据传输&#xff0c;其次详细的阐述了CAN总线过载帧及数据帧&#xff0c;具体的跟随小编一起来了解一下吧。CAN总线系统…

oracle回滚段空间满了,Oracle回滚段表空间文件丢损怎样处理?

在很多情况下&#xff0c;数据库是启着的比关闭着解决问题更容易些。 这种情况的两种可能的解决方法 : A) 使丢失的那个数据文件 offline, 并从备份中恢复它&#xff0c;这种情况适用于数据库是处于归档方式的。 B) 另一个方法是 offline 掉所有的那个文件所属表空间的回滚段&a…

vue设置img大小的属性_Vue.js自定义标签属性并获取属性,及绑定img的src属性的坑...

一、定义属性&#xff1a;一般定义属性都是为了动态的去获取属性的值&#xff0c;或者动态的设置属性的值&#xff0c;如果想仅仅是设置一个普通的属性&#xff0c;直接在便签上设置属性即可&#xff0c;就像使用html的title、name等属性一样&#xff0c;如H1标签。下面具体说动…

vue 同级页面调用方法_【Vue】一个vue页面调用另一个vue页面中的方法

想仿着 vue-material 的 Demo & Document 页面的效果写一个小例子.遇到问题的地方是:如上图红色圈出的地方&#xff0c;点击 button 按钮时&#xff0c;无法执行 toggle() 方法&#xff0c;实现显示 Sidenav 的效果。代码如下:App.vue...// 里面主要内容就是一个路由视图..…

oracle dbms_crypto,DBMS_CRYPTO包对Oracle加密

SQL> DECLARE2 input_string VARCHAR2(30) : 需要加密的内容;3 raw_input RAW(128) : UTL_RAW.CAST_TO_RAW(input_string);4 --将需要加密的内容转换成RAW格式5 raw_key RAW(256);6 encrypted_raw RAW(2048);7 encrypted_string V…

大疆手持云台和华为mate20_告别手残,华为Mate30与大疆手持云台拍照真香

智能手机越来越专注于拍照效果&#xff0c;就如笔者现在使用的华为Mate30不仅仅商务范十足&#xff0c;而且拍照技术也是无可挑剔&#xff0c;而想拍的更好有时候外设必不可少&#xff0c;笔者本次搭配了大疆手机云台3的使用&#xff0c;给大家带来一次“华为Mate30与大疆手机云…

MySQL replace into 的坑以及insert相关操作

下面我们主要说一下在插入时候的几种情况&#xff1a; 1&#xff1a;insert ignore 2&#xff1a;replace into 3&#xff1a;ON DUPLICATE KEY UPDATE 关于insert ignore&#xff1a; 关于replace into: 关于ON DUPLICATE KEY UPDATE &#xff1a; MySQL 对 SQL 有很多扩展&a…

php实现tcp连接的原理,PHP实现TCP实例

NotifyService.phpclass NotifyService extends Model{private static $client;private static $redis;/*** 初始化*/protected static function initial(){$url tcp:// . config(ctrl_service.host) . : . config(ctrl_service.port);self::$client stream_socket_client($u…

docker ps3netsrv_QNAP 威联通 NAS TS-212P应用系列 篇一:实践基于QNAP平台搭建PS3NETSRV服务...

QNAP 威联通 NAS TS-212P应用系列 篇一&#xff1a;实践基于QNAP平台搭建PS3NETSRV服务2015-01-01 13:44:0047点赞307收藏70评论小编注&#xff1a;此篇文章来自即可瓜分10万金币&#xff0c;周边好礼达标就有&#xff0c;邀新任务奖励无上限&#xff0c;点击查看活动详情追加修…

一周内自动登录php,利用php实现一周之内自动登录存储机制(cookie、session、localStorage)...

cookie、session、localStorage这三个应该是最让程序员头疼的了,我利用简单的登录界面的username和password来说明一下吧.1.cookie用来存储用户相关数据&#xff0c;存储的位置在用户本地&#xff1a;首先是登录界面定义:Sign me in上面的代码大家都懂吧,就是一个表单.然后就是…

HTTP知识普及系列:HTTP返回状态码

状态码1XX 信息性状态码 接受的请求正在处理  2XX 成功状态码 请求正常处理完毕  3XX 重定向状态码 需要进行附加操作以完成请求  4XX 客户端错误状态码 服务器无法处理请求  5XX 服务器端错误状态码 服务器处理请求出错2XX 相应结果表明请求被正常处理了200 OK 表示从…

来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...

消息语音播报app是一款语音播报工具&#xff0c;它可以将微信、QQ、短信等消息进行语音播报&#xff0c;让你能够第一时间知晓消息内容&#xff0c;无需进入界面也能知晓发来的消息&#xff1b;它支持多个场就下使用&#xff0c;开启语音播报后无需你手动打开手机查看消息&…

linux创建特殊文件rules,RHEL5 Oracle Linux 5上生成正确的udev rule 规则文件

RHEL5 Oracle Linux 5上生成正确的udev rule 规则文件1.确认在所有RAC节点上已经安装了必要的UDEV包[rootrh2 ~]# rpm -qa|grep udevudev-095-14.21.el52.通过scsi_id获取设备的块设备的唯一标识名&#xff0c;假设系统上已有LUN sdc-sdifor i in c d e f g h i;doecho "s…

HTTP知识普及系列:HTTP首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。在请求中&#xff0c;HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。在响应中&#xff0c;HTTP报文由HTTP版本、状态码&#xff08;数字和原因短语&…