原文链接:https://www.gbase.cn/community/post/4940
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在数据库编程中,异常处理机制允许我们捕获和响应错误条件,从而避免程序意外中断。GBase 8s 的PL/SQL提供了一套完整的异常处理框架,使得开发者能够编写更加健壮和可靠的代码。
在本文中主要介绍GBase 8s 的PL/SQL预定义异常和自定义异常。
预定义异常
我们为了兼容性考虑,设计的错误代码完全参照Oracle进行预定义异常,这是为常见错误情况定义的异常名称。这些异常使得错误处理更加直观和方便。以下是一些常见的预定义异常的异常名称、异常码及概述:
no_data_found ORA-01403 SELECT INTO 语句中没有返回任何记录。
too_many_rows ORA-01422 SELECT INTO 语句中返回多于1 条记录。
dup_val_no_index ORA-00001 试图向唯一索引列插入重复值
invalid_cursor ORA-01001 试图进行非法游标操作。
invalid_number ORA-01722 试图将字符串转换为数字
zero_divide ORA-01476 试图用0 作为除数。
cursor_already_open ORA-06511 试图打开一个已经打开的游标
GBase 8s 的PL/SQL 中用 Exception 关键字开始异常处理。
异常发生时,进入异常处理部分,具体的异常与若干个when 子句中指明的异常名匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入 others 进行处理。
示例:
declare
v_aut student.aut%type;
begin
select aut into v_aut
from student
where studentno=999;
--处理异常
exception
when no_data_found then
dbms_output.put_line('没有数据');
when others then
dbms_output.put_line('其他异常');
dbms_output.put_line(v_aut);
end;
自定义异常 (用户自认为的异常信息)
用户可以在开发中自定义异常,自定义异常可以让用户采用与 PL/SQL 引擎处理错误相同的方式进行处理,用户自定义异常的两个关键点:
异常定义:
在变量声明部分采用Exception 关键字声明异常,定义方法与定义变量相同。
如声明一个 GBase 8s 的PL/SQL块:
声明方法:myexception
异常方法:myexception Exception
异常引发:在程序可执行区域,使用Raise关键字进行引发,raise myexception。
declare empsal emp.sal%type;-- 自定义异常,异常类型必须是exception
mydefiniExp exception;
begin select sal into empsal from emp where empno=7934;
if empsal <2000 then -- 抛出自定义异常
raise mydefiniExp;
end if;
exception when no_data_found then dbms_output.put_line('no recordset');
when mydefiniExp then dbms_output.put_line('sal is
to less');
when others then dbms_output.put_line('no
result');
end;
通过掌握GBase 8s 的PL/SQL的异常处理机制,开发者可以更加有效地管理数据库操作中可能出现的错误,从而提高程序的稳定性和可靠性。无论是预定义异常、非预定义异常还是自定义异常,它们都是确保数据库程序健壮性的重要工具。感谢您的阅读。
原文链接:https://www.gbase.cn/community/post/4940
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。