logo
GBase 8s
其他
文章

南大通用GBase 8s 的PL/SQL异常处理

路路路
发表于2024-12-11 17:20:28290次浏览0个评论

在数据库编程中,异常处理机制允许我们捕获和响应错误条件,从而避免程序意外中断。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的异常处理机制,开发者可以更加有效地管理数据库操作中可能出现的错误,从而提高程序的稳定性和可靠性。无论是预定义异常、非预定义异常还是自定义异常,它们都是确保数据库程序健壮性的重要工具。感谢您的阅读。

评论

登录后才可以发表评论