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

原文链接: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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容