RAISE_APPLICATION_ERROR有两种用途.第一个是用我们自己的更有意义的消息来替换通用的Oracle异常消息.第二个是创建我们自己的异常条件,当Oracle不会抛出它们时.

以下过程说明了两种用法.它实施了一项业务规则,即将来不能雇用新雇员.它也覆盖了两个Oracle异常.一个是DUP_VAL_ON_INDEX,由EMP(ENAME)上的唯一键抛出.另一个是当EMP(MGR)和EMPNO(EMPNO)之间的外键被违反时(因为管理员必须是现有员工)而抛出的用户定义的异常.

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;

PRAGMA EXCEPTION_INIT(invalid_manager, -2291);

dummy varchar2(1);

begin

-- check hiredate is valid

if trunc(p_hired) > trunc(sysdate)

then

raise_application_error

(-20000

, 'NEW_EMP::hiredate cannot be in the future');

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);

when invalid_manager then

raise_application_error

(-20002

, 'NEW_EMP::'||p_mgr ||' is not a valid manager');

end;

/

看起来如何

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-06512: at "APC.NEW_EMP", line 16

ORA-06512: at line 1

SQL>

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

SQL>

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

请注意在EXCEPTIONS块中对RAISE_APPLICATION_ERROR的两次调用的不同输出.将可选的第三个参数设置为TRUE表示RAISE_APPLICATION_ERROR包含堆栈中的触发异常,这对诊断有用.

oracle raise默认作用,Oracle:使用RAISE_APPLICATION_ERROR的情况是什么?相关推荐

  1. oracle raise默认作用,postgreSQL之raise用法

    raise函数 在PostgreSQL中,该函数用于打印字符串,类似于Java中的System.out.println(),Oracle中的dbms_output.put_line(). 在Postg ...

  2. oracle 分区字段作用,oracle表分区的作用

    表空间及分区表的概念 表空间:(推荐学习:web前端视频教程) 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 分区表: 当表中的数据量不断增大, ...

  3. oracle数据缓冲区作用,Oracle内存结构(02)--缓冲区

    用户提交一个新SQL语句时,Oracle会分析(parse)该句SQL(硬解析),这个过程将耗费相对较多的时间.分析完毕后,oracle会将该SQL的分析结果给保存在Library Cache中,当数 ...

  4. oracle pga的作用,ORACLE PGA 的调整

    PGA分两种管理模式: 手动PGA内存管理:用户指定排序区和散列区所使用的内存,每个连接使用相同的内存. 自动PGA内存管理:告诉Oracle可以使用的PGA的总量,由Oraclce根据系统负载决定具 ...

  5. oracle中having作用,oracle中having与where的区别

    1.where 不能放在group by 的后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函 ...

  6. 禁用oracle的默认账户,Oracle EBS默认的账户

    DB的默认账户及密码 system/manager sys/manager(或者change_on_install) apps/apps inv/inv wms/wms wip/wip po/po . ...

  7. oracle加上默认值,Oracle创建表,并添加默认值和备注

    create table testemp( id varchar2(50) default sys_guid(), deptno varchar2(20) ,--部门编码 ename varchar2 ...

  8. oracle 分区 默认分区,Oracle 分区表分配分区

    情况一:没有指定maxvalue alter table EQRECIPEITEMHISTORY_20171123 add partition p_201805 values less than (t ...

  9. oracle序列默认类型,ORACLE 序列-整理

    序列(sequence)是ORACLE数据库库实现列自动增长的唯一方式. 创建序列语法如下: CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] // ...

  10. oracle的默认值,Oracle默认值

    我有一个关于Oracle中PL/SQL函数默认值的简短问题.以这个程序为例,Oracle默认值 create or replace FUNCTION testFunction ( varNumber ...

最新文章

  1. CDH大数据集群安全风险汇总
  2. Alpha 冲刺(2/10)
  3. Json解析异常处理方式(JSONException: Value of type java.lang.String cannot be converted to JSONObject)...
  4. 【最短路】【SPFA】电车 (luogu 1346)
  5. PyTorch 1.0 中文文档:广播语义
  6. 没有人躲得过:被数学支配的噩梦
  7. Redux Toolkit 使用指南
  8. Mac下.DS_Store删除、禁止生成以及恢复生成方式
  9. 博客主之自我介绍(不长,随便瞅瞅)
  10. 知乎APP---案例分析
  11. 对于教育改革的一些省思
  12. 3.Go语言中常量,变量, 及其命名规则以及代码风格
  13. ios系统升级记录适配篇
  14. obs linux编译,教你如何在 Ubuntu 18.04/16.04 中安装 OBS Studio 21.1
  15. Error creating bean with name ‘dataSource‘: Error setting property,river for test database type [HSQ
  16. 机器学习完整项目实战附代码(一):探索型数据分析+特征工程+建模+报告
  17. php 字母数字下划线,CTF踩坑PHP编写一个不包含数字字母和下划线的后门
  18. linux trac apache,Linux环境下安装trac图文教程
  19. MYsql建立学生成绩表
  20. 4.java基础-static

热门文章

  1. 谢谢有你【我与51CTO一“七”成长】
  2. CSS盒模型层次平面示意图和3D示意图
  3. pytorch梯度的自动求取
  4. 数据--第35课 - 创建二叉树
  5. 阿里java代码规范插件
  6. 字符串输入控制:与空格、回车的输入相关的几种函数
  7. DUBBO服务启动过程
  8. RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案
  9. 虚拟机是怎么实现的?(转)
  10. Linux基本命令学习笔记