首页 > 经验记录 > PL/SQL异常

PL/SQL异常

在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分
异常有两种类型:
预定义异常 –  当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发
用户定义异常  –  用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发
 
 
 
常用的异常:
access_into_null 在未初化对象时出现
case_not_found 在CASE语句中的选项与用户输入的数据不匹配时出现
collection_is_null 在给尚未初始化的表或数组赋值时出现
cursor_already_open 在用户试图打开已经打开的游标时出现
dup_val_on_index 在用户试图将重复的值存在使用唯一索引的数据库列中时出现
invalid_cursor 在执行非法游标运算(如打开一个尚未打开的游标)时出现
invalid_number 在将字符串转换为数字时出现
login_denied 在输入的用户名或密码无效时出现
no_data_found 在表中不存在的请求的行时出现,此外,当程序引用已经删除的元素时
storage_error 在内存损坏或PL/SQL耗尽内存时出现
too_many_rows 在执行SELECT INTO语句后返回多行时出现
value_error 在产生大小限制错误时出现
zero_divide 以零作除数时出现
Others针对所有异常
 
 
例题:
 

--根据输入的员工姓名查询员工的薪资 NO_DATA_FOUND
declare
   v_sal emp.sal%type;
begin
   select sal into v_sal from emp where ename='&pname';
   dbms_output.put_line(v_sal);
exception
   when NO_DATA_FOUND then
     dbms_output.put_line('不存在你输入的员工');
   when others then
     dbms_output.put_line('test....');
end;
--自定义异常
declare
    v_empno emp.empno%type := &eno;
    no_result exception;
begin
    update emp set sal=sal+100 where empno=v_empno;
    if SQL%NOTFOUND then
      raise no_result;
    end if;
exception
    when no_result then
       dbms_output.put_line('你的数据更新语句失败');
    when others then
      dbms_output.put_line('test....');
 end;

 

           


EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00