Oracle 异常

/*--异常


 命名的系统异常     产生原因 

access_into_null    未定义对象
 
case_not_found     case中若未包含相应的when,并且没有设置 

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 在等待资源时超时


*/


--异常
--例子
declare
	v_empno emp.empno%type:=&empno;
begin
       update emp set sal=sal+1000 where empno=v_empno;
	commit;
exception
       when no_data_found then
	dbms_output.putline('指定的员工不存在');
	when others then
	dbms_output.putline('产生了其他异常');
end;


---自定义异常

declare
	v_empno emp.empno%type:=&empno;
	noresult exception;
begin
	update emp set sal=sal+1000 where empno=v_empno;
	if(sql%notfound) then---判断SQL语句是否成功执行。当有作用行时否其值为FALSE,否则其

值为TRUE。
   	raise noresult;---抛出异常
	else
	 commit;
	end if;
exception
	when noresult then
	dbms_output.putline('指定员工不存在');
	when others then
	 dbms_output.put_line('产生其他异常');
 END;





/* 一、游标的相关概念及特性
    1.定义
        映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集

中某个特定的行,然后根据业务需求对该行进行相应特定的操作。

    2.游标的分类
        在Oracel中,游标可以分为两大类:静态游标 和 REF游标(动态游标)。REF游标是一种引用

类型,类似于指针。而静态游标又分为显式游标和隐式游标两种。


        结构图如下:                        |--隐式游标:系统自动定义的游标,用于处理select 

into 和DML语句。
                           |---静态游标---|
Oracle游标-----|                           |--显式游标:即用户自定义游标,专门用于处理      

                                                         select语句返回的多行数据。
                           |---REF游标(本文不作详细介绍)


    3.游标使用的一般过程:
        显式游标:声明--->打开--->读取--->关闭。
        隐式游标:直接使用读取,声明、打开、关闭都是系统自动进行的。

    4.游标的4个共同属性:%FOUND,%NOTFOUND,%ISOPEN,%ROWCOUNT。
       %FOUND 布尔型属性,如果SQL语句至少影响到一行数据,则该属性为TRUE,否则为FALSE。
       %NOTFOUND 布尔型属性,与%FOUND相反。
       %ISOPEN 布尔型属性,判断游标的状态,当游标已经打开时返回TRUE,游标关闭时则返回FALSE

。
       %ROWCOUNT 数字型属性,返回受SQL影响的行数。
        注:当使用隐式游标的属性时,需要在属性前加上SQL。因为Oracle在创建隐式游标时,默认的

游标名为SQL。比如:..... if SQL%NOTFOUND then....

二、隐式游标

    1.隐式游标定义

       隐式游标由系统自动定义,其过程由oracle控制,完全自动化。比如当DML被使用时,Oracle为

每一个不属于显式游标的DML语句都创建一个隐式游标,其声明、打开、关闭都是系统自动进行。另外,

隐式游标默认的名称是SQL,不能对SQL游标显式地执行OPEN,FETCH,CLOSE语句。

    2.隐式游标的属性

        类似于显示游标,隐式游标同样具有四种属性,只不过隐式游标以SQL%开头,而显示游标以

Cursor_name%开头。
        并且,通过SQL%总是只能访问前一个DML操作或单行SELECT操作的游标属性,用于判断DML执行

的状态和结果,进而控制程序的流程。

        SQL%ISOPEN  
                游标是否打开。当执行select into、insert、update、delete这些DML操作时,      

                Oracle会隐含地打开游标,且在该语句执行完毕或隐含地关闭游标。因为是隐式游标  

              ,故SQL%ISOPEN总是FALSE。
        SQL%FOUND     
                判断SQL语句是否成功执行。当有作用行时则成功执行为TRUE,否则为FALSE。
        SQL%NOTFOUND   
                判断SQL语句是否成功执行。当有作用行时否其值为FALSE,否则其值为TRUE。
        SQL%ROWCOUNT 
                在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL。
                对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1;
                如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND。*/



---DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中

---的数据。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。DML分成交互型DML

---和嵌入型DML两类。依据语言的级别,DML又可分成过程性DML和非过程性DML两种。如---

insert,delete,update,select(插入、删除、修改、检索)等都是DML.










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值