zoukankan      html  css  js  c++  java
  • 在编写PL/SQL代码中使用SELECT语句时如何避免例外发生

        在使用SELECT语句为某变量赋值时,往往会出现"NO_DATA_FOUND""TOO_MANY_ROWS"等异常情况。

    使用SELECT语句分两种情况:

     

    第一种情况,判断某表中是否有符合某一条件的记录,这时使用聚组函数MAX就可以避免以上两个例外的发生。

    其格式:SELECTMAX(列1),MAX(列2......INTO变量1,变量2......FROM基表WHERE条件,当没有符合条件的数据时,该语句返回空,即变量1,变量2......的值均为空,而不会出现"NO_DATA_FOUND"例外。

    另外使用聚组函数MAX的同时也就避免了"TOO_MANY_ROWS"例外。

     

    第二种情况,SELECT语句中含聚组函数SUM,这时如果使用了GROUPBYHAVING子句,当没有符合条件的记录时将发生"NO_DATA_FOUND"例外,此时避免例外的办法是:去掉GROUPBYHAVING子句,将HAVING子句的条件加到WHERE子句中。这样在使用SELECT语句时就不必再额外增加一段处理例外的代码,从而简化的代码的编写。

     

    另外使用SQL%NOTFOUND也是一种比较好的方式。

    SQL%NOTFOUND 是一个布尔值。与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true。否则返回false。这样的语句在实际应用中,是非常有用的。例如要update一行数据时,如果没有找到,就可以作相应操作。如:

    begin

      update salary set bonus = 1000 where emp_id = 10;

      if sql%notfound then

         raise e_noteffact;

      end if;

    当update emp_id为10的这行记录,而这行记录不存在,则作了相应的异常抛出。

  • 相关阅读:
    Qt Q3DScatter中元素的移动和旋转
    Qt QtDataVisualization Q3DScatter绘制散点图
    Qt qwtplot3d根据时间采集多条曲线
    Qt QWT3D 之 三维动态曲线的实现
    Qt 数据可视化之3D图形
    Vagrant在虚拟机Centos7上安装Docker
    VirtualBox+Vagrant环境搭建
    VMware安装Centos7超详细过程(图文)
    上传excel表格批量导入数据到数据库
    IP协议包头分析
  • 原文地址:https://www.cnblogs.com/benio/p/1711230.html
Copyright © 2011-2022 走看看