Oracle笔记 七、PL/SQL 异常处理

--异常处理
declare
  sNum number := 0;
begin
  sNum := 5 / sNum;  
  dbms_output.put_line(sNum);
exception 
  when others then
    dbms_output.put_line(‘is Error!‘);
end;
 
--自定义异常
declare
       ex_custom_invaild_age exception; --自定义的异常myerr
       age int;
begin
     age := &请输入年龄;
     if (age < 0) then
        raise ex_custom_invaild_age; --引发自定义异常
     else
        dbms_output.put_line(‘年龄是:‘ || age);     
     end if;
exception 
      when ex_custom_invaild_age then
        dbms_output.put_line(‘非法的年龄‘);
end;
 
--引发应用程序异常
--raise_application_error(异常编号,说明);
declare        
       age int;
begin
     age := &请输入年龄;
     if (age < 0) then
        raise_application_error(-20500, ‘年龄不能为负数‘);
     else
        dbms_output.put_line(‘年龄是:‘ || age);
     end if;
end;
 
--非预定义异常
declare     
     ex_custom_error exception;
     pragma exception_init(ex_custom_error, -1); --把一个编号和一个自定义异常关联,
     --相当于把-1编号的异常命名为ex_custom_error,这样就可以捕获这种异常
begin       
     insert into dept values(10, ‘aaa‘, ‘bbb‘);
     exception       
       when ex_custom_error then
       dbms_output.put_line(‘部门编号已经存在‘);
end;
 
--异常处理
declare
  vSal emp.sal%type;
begin
  select sal into vSal from emp;
  exception
    when too_many_rows then
      dbms_output.put_line(‘多条数据‘);
    when others then
      dbms_output.put_line(‘Error‘);
end;
 
declare
  vSal emp.sal%type;
begin
  select sal into vSal from emp where empno = 1;
  exception
    when no_data_found then
      dbms_output.put_line(‘没有数据‘);
    when others then
      dbms_output.put_line(‘Error‘);
end;
 
--异常日志处理
create table errorLog (
       id number primary key,
       errCode number,
       errMsg varchar2(1024),
       errDate date
);
--创建序列,从1开始,每次加1
create sequence seq_errorLog_id start with 1 increment by 1;
 
declare
       vDeptno dept.deptno%type := 10;
       vErrCode number;
       vErrMsg varchar2(1024);
begin
  delete from dept where deptno = vDeptno;
  commit;
  exception
    when others then
      rollback;
      vErrCode := SQLCODE;
      vErrMsg := SQLERRM;
      insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);
      commit;
end;
 
select * from errorLog;
时间: 2024-10-07 04:17:44

Oracle笔记 七、PL/SQL 异常处理的相关文章

Oracle数据库之PL/SQL异常处理

Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料到的事件.一个健壮的程序都应该能够正确处理各种异常情况,并尽可能从中恢复. 1. 异常处理 异常处理是用来处理正常执行过程中未预料的事件.PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行. PL/SQL编程过程中,有三种类型的异常: 1.预定义异常 对这种异常情况的处

ORACLE PL/SQL异常处理(Exception)学习笔记

1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理子程序引发并进行捕获 2.异常的声明 有两种异常:用户自定义异常和预定义异常 用户自定义异常就是由程序员自己定义的一个错误.该错误还不是非常重要,所以并没有将整个错误包含在Oracle的错误中.例如,它可能是一个与数据有关的错误.而预定义异常则对应于一般的SQL和PL/SQL错误. 用户自定义异常是

Oracle PL/SQL 异常处理

Oracle数据库中的异常:没有异常的转移,因为没有受检异常和非受检异常得区分. 1.异常的产生: 2.异常的处理: declare --变量定义,初始化赋值. begin --变量的赋值,函数调用,if,while等. exception --异常处理代码 when others then 异常处理语句. end: 3.异常的抛出:raise 4.多异常处理:Java的多异常是通过数据类型区分,Oracle数据库的多异常是通过异常编号区分. 区别不同的异常是实现多异常处理前提. declare

每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQL程序设计终极指南>志在打造PL/SQL领域最为系统.全面.实战.权威的著作,通过一系列非常突出的优势在大量的同类书中脱颖而出,成为该领域的标准读物. PL/SQL本身涉及的知识点浩瀚.庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核

Oracle数据库之PL/SQL程序设计简介

有利于客户/服务器环境应用的运行 对于客户/服务器环境来说,真正的瓶颈是网络上.无论网络多快,只要客户端与服务器进行大量的数据交换,应用运行的效率自然就回受到影响.如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器执行,自然就省去了数据在网上的传输时间. 适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL.对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL

PL/SQL异常处理

As we all known,程序的错误一般分为两类:编译错误和运行时错误.其中运行时错误被称为异常.PL/SQL语句块中处理异常的部分即为异常处理部分.在异常处理部分,可以指定当特定异常发生时所采取的动作. PL/SQL有两种类型的异常:内置异常和用户自定义异常. 其中,内置异常又分为预定义异常和非预定义异常. 一.内置异常 首先试举一例来抛砖引玉. DECLARE v_ename varchar2(10); v_empno number(4) := &v_empno; BEGIN SELE

Oracle数据库之PL/SQL过程与函数

Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后再次

Oracle 11g 的PL/SQL函数结果缓存

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数. C:\Documents and Settings\guogang>sqlplus gg_test/[email protected]_gg SQL*Plus: Release 10.2.0.1.0

Oracle 客户端安装 + pl/sql工具安装配置

Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 10g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 根据自己机器或者oracle服

《oracle每日一练》免安装Oracle客户端使用PL/SQL

免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的机器上的其他程序依赖于x64的Oracle的程序,并且它们很有可能根本不是你写的,因此你还不敢随便乱动服务器,但是你可能需要一个PL/SQL用来在相同的环境下执行查询,这个时候你还是需要一个免安装的办法来处理这个问题. 1.下载Oracle Instant Client (32-bit) 因为我的P