PL/SQL温习八 反常威尼斯人 - 威尼斯人

PL/SQL温习八 反常威尼斯人

2019年02月16日07时04分59秒 | 作者: 运鸿 | 标签: 企图,运用,雇员 | 浏览: 19307

1. 预界说反常: 处理常见的oracle过错

2. 非预界说反常: 处理预界说反常之外不能处理的过错

3. 自界说反常: 处理和oracle过错无关的其他状况

 

declare

  v_ename emp.ename%type;

begin

  select ename into v_ename from emp where empno =

  dbms_output.put_line(雇员名: || v_ename);

exception 以下是反常处理部分

  when no_data_found then

    dbms_output.put_line(雇员号不正确,请核实雇员号!);

  when others then

    dbms_output.put_line(不知道反常);

end;

/

 

-

 

常见预界说反常:

CURSOR_ALREADY_OPEN     ORA-6511  企图翻开一个已翻开的游标

DUP_VAL_ON_INDEX        ORA-0001  企图损坏一个唯一性约束

INVALID_CURSOR          ORA-1001  企图运用一个无效的游标

INVALID_NUMBER          ORA-1722  企图对非数字值进行数字操作

LOGIN_DENIED            ORA-1017  无效的用户名或许口令

NO_DATA_FOUND           ORA-1403  查询未找到数据

NOT_LOGGED_ON           ORA-1012  还未衔接就企图数据库操作

PROGRAM_ERROR           ORA-6501  内部过错

ROWTYPE_MISMATCH        ORA-6504  主变量和游标的类型不兼容

STORAGE_ERROR           ORA-6500  内部过错

TIMEOUT_ON_RESOURCE     ORA-0051  发作超时

TOO_MANY_ROWS           ORA-1422  SELECT INTO指令回来的多行

TRANSACTION_BACKED_OUT  ORA-006   因为死锁提交被退回

VALUE_ERROR             ORA-6502  转化或许裁剪过错

ZERO_DIVIDE             ORA-1476  企图被零除

 

-

 

运用非预界说反常:deptno是外键,假如输入的deptno在dept表中不存在,就会触发反常

declare

  e_exception1 exception;界说反常名

  pragma exception_init(e_exception1, -2291);将反常和oracle过错之间树立相关

begin

  update emp set deptno = dno where empno = eno;

exception

  when e_exception1 then

    dbms_output.put_line(该部分不存在);

end;

/

 

 

运用自界说反常:

declare

  e_exception1 exception;

  pragma exception_init(e_exception1, -2291);

  e_no_employee exception; 自界说反常

begin

  update emp set deptno = dno where empno = eno;

  if sql%notfound then 假如人员不存在 

    raise e_no_employee; 则抛出自界说反常

  end if;

exception

  when e_exception1 then

    dbms_output.put_line(该部分不存在);

  when e_no_employee then

    dbms_output.put_line(该雇员不存在);

end;

/

 

-

 

反常函数:

sqlcode: 回来过错号

sqlerrm: 回来反常音讯

exception

  when others then

    dbms_output.put_line(过错号:||sqlcode);

    dbms_output.put_line(过错音讯:||sqlerrm);

 

raise_application_error: 用于自界说过错音讯,只能在子程序(进程、函数、包、触发器中运用) 不能在匿名块和客户端的子程序中运用

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章