SQL基础-异常处理.docxVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 1 PL/SQL基础-异常处理 Oracle异样分为两种类型:系统异样、自定义异样。 其中系统异样又分为:预定义异样和非预定义异样。 1.预定义异样 ORACLE定义了他们的错误编号和异样名字,频繁的预定义异样处理Oracle频繁的错误 NO_DATA_FOUND SELECT ... INTO ... 时,没有找到数据 DUL_VAL_ON_INDEX 试图在一个有惟一性约束的列上存储重复值 CURSOR_ALREADY_OPEN 试图打开一个已经打开的游标 TOO_MANY_ROWS SELECT ... INTO ... 时,查询的结果是多值 ZERO_DIVIDE 零被整除 2.非预定义异样 ORACLE为它定义了错误编号,但没有定义异样名字。我们用法的时候,先声名一个异样名, 通过伪过程PRAGMA EXCEPTION_INIT,将异样名与错误号关联起来。 3.自定义异样 程序员从我们业务角度动身,制定的一些规章和限制。 二、异样处理 PL/SQL中,异样处理按个步骤举行: 定义异样 抛出异样 捕捉及处理异样 a.定义异样 exception_name EXCEPTION; b.抛出异样 RAISE exception_name c.捕捉及处理异样 EXCEPTION WHEN e_name1 [OR e_name2 ... ] THEN statements; WHEN e_name3 [OR e_name4 ... ] THEN statements; WHEN OTHERS THEN statements; END; --用法预定义的异样 --按照用记输入的商品ID来查商品库存 DECLARE V_ID ES_PRODUCT.ID%TYPE := V_ID; --用户输入商品ID V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; 库存量 BEGIN SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID; DBMS_OUTPUT.PUT_LINE( 库存量: || V_STOCKCOUNT); --推断库存量是否正常 IF V_STOCKCOUNT 0 THEN --更新库存,一次买一个减掉一个 UPDATE ES_PRODUCT SET STOCKCOUNT = STOCKCOUNT - 1 --更新指定的,不然会所有更新 WHERE ID = V_ID; --提出数据操作 COMMIT; DBMS_OUTPUT.PUT_LINE( 库存更新胜利 ELSIF V_STOCKCOUNT = 0 THEN DBMS_OUTPUT.PUT_LINE( 库存量是0,没有库存了 ELSE DBMS_OUTPUT.PUT_LINE( 库存异样 END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE( 该商品不存在! ROLLBACK; WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE( 该商品存在多个! ROLLBACK; WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( 发生了其它错误! ROLLBACK; END; --自定义异样 --实现订单删除 SELECT * FROM ES_ORDER; DECLARE E_NO_RESULT EXCEPTION; V_ID ES_ORDER.ID%TYPE := V_EXCEPTION1 CONSTANT VARCHAR2(50) := 删除数据不胜利! V_EXCEPTION2 CONSTANT VARCHAR2(50) := 发生了错误! BEGIN DELETE FROM ES_ORDER WHERE ID = V_ID; IF (SQL%NOTFOUND) THEN --删除没有执行 RAISE E_NO_RESULT; END IF; EXCEPTION WHEN E_NO_R

文档评论(0)

158****9345 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档