【Oracle】Oracle中的极度

一、摘要

在PLSQL程序支付进度中,很首要的一些就是对先后极度的监察和拍卖,包涵什么触发非凡,哪天举办处理,怎么着开展处理,是或不是将程式中的所有尤其集中在一块,通过集体分外处理的procedure或function,假若没有两全的程式处理体制,很难说该程式是一只健壮的程式,当程式遇到重重品种或者量很多材料时,系统若没有那几个处理肯定会造成程式的失误

当预判到了好几十分,须求对预判到的要命进行适度相应的处理,是不是抛出非凡或者大意仍然其余

当然程式没有预判到或者是局地无人问津的极度遇到,所以这些处理模块也要考虑这一个未预感到的程式

PLSQL十分的素材网络流传许多,都不怎么看似,归结的很详细了,资料被转来转去,也不太明白原文的出处,向未知的大神致敬

正文整理下网络上的资料,并再度排版了下

  • 特其他分类
    • 系统自带万分
    • 用户自定万分
  • 可怜的抛出
    • PLSQL引擎自动处理
    • Raise
    • Raise_Application_Error
  • 相当的拍卖
    • 用户自定十分处理
    • 系统自带很是处理
    • 不解很是处理
    • 在宣称阶段中卓殊
  • 这个的不胫而走十分的SQLCode 和 SQL Errm
    • 非常在表明块中传来
    • 很是在推行块中流传
  • Oracle ERP Fnd_file工具
    • fnd_file.output
    • fnd_file.log
  • 附件
    • 附件 – Oracle自带极度列表
    • 附件 – Oracle Standard Error 列表

二、概述

1. 十分的归类

1.1 系统自带格外

1.1.1 概念 :
执行时期再次回到到PL/SQL块的ORACLE错误或由PL/SQL代码的某操作引起的荒谬,如除数为零或内存溢出的图景

                  
每当PL/SQL违背了ORACLE原则或超过了系统依赖的口径就会隐式的发出内部分外。

                  
因为每个ORACLE错误都有一个数码并且在PL/SQL中优秀通过名字处理,ORACLE提供了预订义的中间分外

1.1.2 例子:
未定义万分,系统碰着预约义分外时,自动抛出,如no_data_found

        图片 1

1.2 用户定义分外

1.2.1 概念:
由开发者突显定义,在PL/SQL块中传递音讯以控制对于利用的错误处理

                       
若是要处理未命名的内部十分,必须运用OTHERS非常处理器或PRAGMA
EXCEPTION_INIT 。

                         
PRAGMA由编译器控制,或者是对此编译器的诠释。PRAGMA在编译时处理,而不是在运作时处理。

                          EXCEPTION_INIT告诉编译器将更加名
与ORACLE错误码结合起来,那样可以因而名字引用任意的其中分外,并且可以通过名字为卓殊编写一恰当的不行处理器。

1.1.2 例子: 自定义一个充足bxj_exception,并抛出

        图片 2

2. 那一个的抛出

2.1 通过PLSQL引擎自动处理

2.1.1 概念:
当数据库或PL/SQL在运行时爆发错误时,一个更加被PL/SQL运行时引擎自动抛出

2.1.2 例子: 系统自导抛出非凡,并处理

               图片 3

2.2 通过Raise

2.2.1 概念: 至极也足以透过RAISE语句抛出RAISE exception_name;
             
显式抛出非常是程序员处理注脚的相当的习惯用法,但RAISE不防止声明了的不胜,它可以抛出任何其它万分。例如,你希望用TIMEOUT_ON_RESOURCE错误检测新的周转时这几个处理器

2.2.2 例子: 通过raise语句将尤其抛出

               图片 4

2.3 通过Raise_Application_Error

2.3.1 概念: RAISE_APPLICATION_ERROR
内建函数用于抛出一个不胜并给那一个赋予一个张冠李戴号以及错误音讯。

                   自定义非凡的缺省错误号是+1,缺省新闻是
User_Defined_Exception。

                  
RAISE_APPLICATION_ERROR函数可以在pl/sql程序块的推行部分和非凡部分调
用,显式抛出带特殊错误号的命名非凡。

                  
Raise_application_error(error_number,message[,true,false])

                  
错误号的限量是-20,000到-20,999。错误音讯是文本字符串,最多为2048字节。TRUE和FALSE表示是增进(TRUE)进错误堆(ERROR
STACK)仍旧覆盖(overwrite)错误堆(FALSE)

2.3.2 例子: 通过raise_application_error语句将相当抛出

图片 5

3. 不行的处理

3.1 用户自定极度处理 、 系统自带相当处理、 未知非常处理

以下一个简单易行的例子表明了程式二种相当的捕捉和拍卖

图片 6

3.2 在宣称阶段中更加

以下一个粗略的例子说明了在宣称阶段的百般,一般的话package执行进度中很少碰着那种错误,因为在编译过程中就会审计

除非所引用的table的布局暴发变化,导致引用败北

图片 7

4. 特其余传遍

4.1 假如那一个发生在实践块

当一个不胜错误在推行部分吸引时,有下列景况:

比方当前块对该尤其错误安装了处理,则履行它并打响完毕该块的推行,然后决定转给包罗块。

只要没有对脚下块非凡错误安装定义处理器,则透过在含蓄块中引发它来传播格外错误。然后对该包涵块执行步骤

4.2 借使不行暴发在注明块

假如在宣称部分引起非常意况,即在表明部分出现谬误,那么该错误就能影响到其他的块

5. 异常的SQLCode 和 SQL Errm

5.1 概念

由于ORACLE
的错音讯最大尺寸是512字节,为了拿走完全的错误提醒音讯,我们可用
SQLERRM和 SUBSTR 函数一起收获错误提醒音信,方便开展不当,更加是倘若WHEN
OTHERS十分处理器时越发便利。

  • SQLCODE  返回遭受的Oracle 错误号
  • SQLERRM  重回遭逢的Oracle错误音讯

5.2 例子

产生SQLCode和SQLErrm

图片 8

**6. Oracle fnd_file.output 和 fnd_file.log


6.1 fnd_file.output

用于Request输出报表暴发layout,一般不可以在此间写log语句

6.2 fnd_file.log

用来存放程式log记录,用于写log,程式非常处理记录都能够透过那一个api进行记录

图片 9

7. 附件 

7.1 附件 – Oracle自带非常列表

  • ACCESS_INTO_NULL                     未定义对象  
  • CASE_NOT_FOUND                       CASE 中若未包涵相应的 WHEN
    ,并且没有设置 ELSE 时  
  • COLLECTION_IS_NULL                  集合元素未早先化  
  • CURSER_ALREADY_OPEN              游标已经开辟  
  • DUP_VAL_ON_INDEX                   
    唯一索引对应的列上有双重的值  
  • INVALID_CURSOR                        在非法的游标上开展操作  
  • INVALID_NUMBER                        内嵌的 SQL
    语句不可以将字符转换为数字  
  • NO_DATA_FOUND                        使用 select into
    未归来行,或应用索引表未起头化的元素时  
  • TOO_MANY_ROWS                       执行 select into
    时,结果集超过一行  
  • ZERO_DIVIDE                              除数为 0  
  • SUBSCRIPT_BEYOND_COUNT        元素下标超越嵌套表或 VARRAY
    的最大值  
  • SUBSCRIPT_OUTSIDE_LIMIT         使用嵌套表或 VARRAY
    时,将下标指定为负数  
  • VALUE_ERROR                            
    赋值时,变量长度不足以容纳实际数据  
  • LOGIN_DENIED                            PL/SQL 应用程序连接到
    oracle 数据库时,提供了不得法的用户名或密码  
  • NOT_LOGGED_ON                        PL/SQL 应用程序在没有连接
    oralce 数据库的图景下访问数据  
  • PROGRAM_ERROR                        PL/SQL
    内部难点,可能要求重装数据字典& pl./SQL 系统包  
  • ROWTYPE_MISMATCH                  宿主游标变量与 PL/SQL
    游标变量的回来类型不包容  
  • SELF_IS_NULL                             使用对象类型时,在 null
    对象上调用对象方法  
  • STORAGE_ERROR                        运行 PL/SQL 时,超出内存空间  
  • SYS_INVALID_ID                         无效的 ROWID 字符串  
  • TIMEOUT_ON_RESOURCE          Oracle 在等待资源时超时 

7.2 附件 – Oracle Standard Error 列表

图片 10图片 11

产生原因
12-1-502
ACCESS_INTO_NULL


未定义对象

CASE_NOT_FOUND


CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时

COLLECTION_IS_NULL


集合元素未初始化

CURSER_ALREADY_OPEN


游标已经打开

DUP_VAL_ON_INDEX


唯一索引对应的列上有重复的值

INVALID_CURSOR


在不合法的游标上进行操作

INVALID_NUMBER


内嵌的 SQL 语句不能将字符转换为数字

NO_DATA_FOUND


使用 select into 未返回行,或应用索引表未初始化的元素时

TOO_MANY_ROWS


执行 select into 时,结果集超过一行

ZERO_DIVIDE


除数为 0

SUBSCRIPT_BEYOND_COUNT


元素下标超过嵌套表或 VARRAY 的最大值

SUBSCRIPT_OUTSIDE_LIMIT


使用嵌套表或 VARRAY 时,将下标指定为负数

VALUE_ERROR


赋值时,变量长度不足以容纳实际数据

LOGIN_DENIED


PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码

NOT_LOGGED_ON


PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据

PROGRAM_ERROR


PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包

ROWTYPE_MISMATCH


宿主游标变量与 PL/SQL 游标变量的返回类型不兼容

SELF_IS_NULL


使用对象类型时,在 null 对象上调用对象方法

STORAGE_ERROR


运行 PL/SQL 时,超出内存空间

SYS_INVALID_ID


无效的 ROWID 字符串

TIMEOUT_ON_RESOURCE


Oracle 在等待资源时超时

Oracle中常见那么些

 

 原文连接:PLSQL_ORACLE EXCEPTION
很是分类,处理,抛出,传播

相关文章