zoukankan      html  css  js  c++  java
  • orcale 之pl/sql例外

      orcale 中的例外我们可以看作是其他编程语言中的异常,是为了增强语言的健壮性和容错性。

      在orcale中常见的有以下几种:

    1. No_data_found 很容易理解就是没有数据返回。
    2. Too_many_rows 在我们使用 select ... into 的时候这种错误经常的会发生,就是因为其返回了多条内容。
    3. Zero_Divide 被零除。
    4. Value_error 算数或者转换错误,比如说我们想把一个字符串 “abc” 转换成一个整数类型的数据
    5. Time_on_resource 等待资源的时候由于时间过长会有这样的例外发生。

    自定义例外

      可以在声明的时候定义一个例外如下:

    no_emp_found exception;

      在有可能发生异常的地方使用 raise 将异常进行抛出

    raise no_emp_found;
    

      最后我们只需要对异常进行处理就行了

    例子 查询 orcale 自带表emp 中 50 号部门的员工,我们知道50号部门是没有员工的。

    --自定义例外没有查找到的例外no_emp_found
    declare 
      cursor c_emp is select ename from emp where deptno=50;
      p_ename emp.ename%type;
      --定义一个例外
      no_emp_found exception;
    begin
      open c_emp;
        --获取一条记录
        fetch c_emp into p_ename;
        --如果没有查到则抛出自定义例外
        if c_emp%notfound then 
          raise no_emp_found;
        end if;
      close c_emp;
      --捕获例外
      exception 
        when no_emp_found then  dbms_output.put_line('没有该部门下的员工');
        when others then  dbms_output.put_line('其他例外');
    end;
    /
    

      这里有一个问题:我们知道无法查询到50号部门的员工所以会提前的抛出异常,那么这个游标就没有办法关闭了,事实是这样的吗?其实这个游标还是会关闭的啊。在 orcale 中会自行的启动一个叫pmon(process monitor) 的进程,该进程的目的就是对pl/sql中的资源进行监控,如果发现存在没有关闭的资源会对其进行关闭操作。所以我们无需关心资源没有关闭的问题,但是提醒大家还是最好手动的对资源进行关闭的操作。

      

      

  • 相关阅读:
    Error creating bean with name 'eurekaAutoServiceRegistration'
    CentOS 下 安装 nginx 执行配置命令 ./configure 报错
    linux解压war包的命令
    idea中如何将一个普通项目转换为maven项目(或者导入Maven项目后没反应)
    IDEA报 : Lombok Requires Annotation Processing
    IDEA中如何添加RunDashboard
    @Controller 和 @RestController 的区别
    @RequestMapping 和 @GetMapping @PostMapping 区别
    批量提取指定文件夹下的所有文件名称及其路径
    TortoiseSVN的bin目录下面没有svn.exe
  • 原文地址:https://www.cnblogs.com/brother-four/p/6551335.html
Copyright © 2011-2022 走看看