【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
异常分类,处理,抛出,传播

相关文章