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,一经查实,立即删除!

相关文章

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

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

Linux系统查看系统硬件,linux怎么查看系统硬件信息

有时候想查看电脑中的系统硬件信息不知道怎么办下面是学习啦小编带来的关于linux怎么查看系统硬件信息的内容&#xff0c;欢迎阅读!linux怎么查看系统硬件信息?查看cpu&#xff1a;lscpu命令&#xff0c;查看的是cpu的统计信息.blueblue-pc:~$ lscpuArchitecture: i686 #cpu架…

designer pyqt5 界面切换_PyQt5快速上手基础篇3-设置窗口标题和图标

前言本节我们为QT Designer生成的UI界面添加图标和窗口标题。一、实例运行1. QT Designer设计UI打开designer.exe,使用默认的Main Window创建&#xff0c;直接点击Create按钮即可设计UI图如下&#xff0c;并保存为test.ui2 将test.ui转换为ui_test.py进入ui_test.py目录&#x…

linux系统gpu test,轻量级显卡测试软件GpuTest 0.4.0版下载,支持windows Linux MAC-站长资讯中心...

说到显卡测试&#xff0c;我们一定会想到3D Mark&#xff0c;可是看着3D Mark那几百兆的大小和小水管的网速&#xff0c;有没有轻量级的测试软件呢&#xff1f;GpuTest就是一款十分小巧的软件&#xff0c;这是一款基于OpenGL的显卡压力测试软件&#xff0c;GpuTest还是一款跨平…

pandas 合并所有列_Python学习:Pandas库

pandas包含数据结构和数据处理工具的设计使得在Python中进行数据清洗和分析非常快捷。pandas经常是和NumPy,Scipy以及数据可视化工具matplotlib一起使用的。pandas支持大部分NumPy语言风格的数组计算&#xff0c;但最大的不同在于pandas是用于处理表格型或异质型数据的。而NumP…

进程和多线程

一、进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的&#xff0c;每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ、Xcode&#xff0c;系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线…

CUMT--Java复习--网络编程

目录 一、Java网络API 1、InetAddress类 2、URL类 3、URLConnection类 4、URLDecoder类和URLEncoder类 二、基于TCP的网络编程 1、Socket类 2、ServerSocket类 三、网络通信过程 一、Java网络API Java中有关网络方面的功能都定义在java.net中。 1、InetAddress类 Jav…

iOS懒加载

1.懒加载基本 懒加载——也称为延迟加载&#xff0c;即在需要的时候才加载&#xff08;效率低&#xff0c;占用内存小&#xff09;。所谓懒加载&#xff0c;写的是其getter方法。说的通俗一点&#xff0c;就是在开发中&#xff0c;当程序中需要利用的资源时。在程序启动的时候不…

【Django】Django Debug Toolbar调试工具配置

正在发愁怎么调试Django&#xff0c;就遇到了Django Debug Toolbar这个利器。 先说遇到的问题&#xff1a; 网上也有教程&#xff0c;不过五花八门的&#xff0c;挨个尝试了一遍&#xff0c;也没有成功运行。最后终于找到问题所在&#xff1a; 从开发服务器日志可知&#xff1a…

python中提取pdf文件某些页_人工智能|Python提取PDF中的文本并朗读

题前的话之前有老师在群里推荐这个&#xff0c;我看了一眼觉得还是蛮有趣的&#xff0c;然后就忘了……昨天又看到这个《宅男福利&#xff01;我50行Python代码让小姐姐给你读Pdf》&#xff0c;今天于是开始自己尝试&#xff0c;谁知道pdfplumber库怎么也安装不了&#xff0c;最…

[UVA315]Network(tarjan, 求割点)

题目链接&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem251 求割点&#xff0c;除了输入用strtok和sscanf处理输入以外&#xff0c;对于求割点的tarjan算法有了进一步理解。 特别注意88行&#xff0…

prim求最短路径C语言,[图论]Prim算法求最小支撑树和最短路径

这个是以前所学&#xff0c;现在总结成博文一篇。对于图论中的求解最小支撑树问题和最短路径问题都有比较经典的算法&#xff0c;比如最小支撑树可以采用“破圈法”&#xff0c;求解最短路径可以用“Dijkstra算法”。这里笔者将回顾下求解最小支撑树的Prim算法和最短路径算法。…

pycharm镜像源_pycharm安装第三方库

点击蓝字关注我们hello&#xff0c;大家好&#xff0c;我是你们的小编大飞。小编一直在学习编程语言&#xff0c;挑选了很久之后决定入了python的坑(bushi)。而python之所以火&#xff0c;是因为它专注于如何解决问题、自由开放的社区环境以及丰富的第三方库。几乎可以这么说&a…

android系统源码的环境下用make来编译,Android源码编译系统入门

做过 Android 平台开发的朋友对make&#xff0c;mm或make clean命令应该很熟悉&#xff0c;但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理&#xff1f;那么今天我就带着大家推开Android编译系统的大门&#xff0c;探索一下这片未知的恐怖之森(问啥要用恐怖…

(mac)阿里云ECS服务器配置过程

-----首先本人是半只脚入门的iOS开发者&#xff0c;弄这个只是单纯想多学点东西。 -----阿里云服务器的配置选择&#xff1a;既然是学习用的&#xff0c;最最基础的配置就行了。1M带宽&#xff0c;1核1G...这就不详述了。没啥可选的&#xff0c;&#xff08;其中有个创建实例&a…

android 换到iphone,从安卓换到苹果到底是什么感受?最后一个让我彻底放弃了iPhone!...

原标题&#xff1a;从安卓换到苹果到底是什么感受&#xff1f;最后一个让我彻底放弃了iPhone&#xff01;iPhone X是近几年来苹果最具创新力的iPhone&#xff0c;然而高昂的售价让很多消费者望而却步。随着今年苹果秋季新品发布会的临近&#xff0c;苹果即将发布价格更低廉&…

php 5.5 xhprof for windows

今天看到一个好的性能优软件xhprof&#xff08;有facebook开发的类库)在国内找了很多网站都没有找到相关php5.5的扩展&#xff0c;只好FQ还是外面的世界精彩一下就找到了link (http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/)如果不能FQ的小伙伴可以到我的百度…

鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

原标题&#xff1a;一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验【手机中国新闻】9月10日下午&#xff0c;华为召开HDC2020大会&#xff0c;全新的HarmonyOS 2.0正式发布。新系统的分布式能力全面升级&#xff0c;同时还为开发者提供了完整分布式设备与应用开发生态&…

如何在android模拟器中安装apk

1. 启动android模拟器 2. 将要安装的apk&#xff0c;拷贝在与adb.exe同文件夹中。我的路径&#xff1a;D:\android\android-sdk-windows\platform-tools 3. 在cmd中&#xff0c;进入上目录&#xff0c;输入adb install xxx.apk&#xff0c;最后可看见success 4. 回到android模拟…

传感器系列之4.3流量传感器

4.3 流量数据采集实验 一、实验目的掌握水流量计的结构与工作原理掌握霍尔传感器的使用二、实验材料具有USB 串口通讯的PC 机1 台ADS1.2 集成开发软件1 套J-Link-ARM 仿真器及软件1 套NXP LPC2378 实验节点板1 个LCD 显示实验板1 个BMP085数字气压传感器模块1个三、实验原理流量…