oracle学习笔记(十六) PLSQL 异常和goto语句

mac2022-06-30  111

PL/SQL 异常和goto语句

异常

预定义异常

oracle常见预定义异常:

错误号异常错误信息名称说明ORA-0001DUP_VAL_ON_INDEX试图破坏一个唯一性限制ORA-0051TIMEOUT_ON_RESOURCE(少用)在等待资源时发生超时ORA-0061TRANSACTION_BACKED_OUT(少用)由于发生死锁事务被撤消ORA-1001INVALID_CURSOR试图使用一个未打开的游标ORA-1012NOT_LOGGED_ON(少用)没有连接到ORACLEORA-1017LOGIN_DENIED(少用)无效的用户名/口令ORA-1403NO_DATA_FOUNDSELECT INTO没有找到数据ORA-1422TOO_MANY_ROWSSELECT INTO 返回多行ORA-1476ZERO_DIVIDE试图被零除ORA-1722INVALID_NUMBER转换一个数字失败 OTHERS(总是写在最后)其它的异常(总是放在异常处理块的最后)

Oracle内置有两个与异常有关的函数

SQLCODE 返回Oracle的错误代码SQLERRM 返回Oracle的错误消息 复制--使用预定义异常 declare v_empno employee.empno%type; rec_emp employee%rowtype; begin v_empno := &请输入员工编号; select * into rec_emp from employee;-- where empno=v_empno; dbms_output.put_line('编号:'||rec_emp.empno||', 姓名:'||rec_emp.ename); --异常处理 exception when NO_DATA_FOUND then --数据未找到 dbms_output.put_line('数据未找到,原因:'||SQLCODE||','||SQLERRM); when TOO_MANY_ROWS THEN dbms_output.put_line('数据过多,不能给变量赋值,原因:'||SQLCODE||','||SQLERRM); when others then dbms_output.put_line('未知异常,原因:'||SQLCODE||','||SQLERRM); end; /

自定义异常

声明异常: 变量名 exception;抛出异常: raise 变量名;处理异常:exception 复制--问题:如果某员工没有奖金时抛出“无奖金异常” declare v_empno employee.empno%type := &请输入编号; rec_emp employee%rowtype; ex_no_comm exception; --定义无奖金异常 begin select * into rec_emp from employee where empno=v_empno; if (rec_emp.comm is null or rec_emp.comm=0) then raise ex_no_comm;--2. 抛出异常 end if; --3. 异常处理 exception when ex_no_comm then dbms_output.put_line('无奖金异常'); end; /

异常交给java处理(了解)

使用SQL中的函数RAISE_APPLICATION_ERROR(error_number, error_message)即可把异常交给java处理。 java中通过try捕获到SQLException,之后通过SQLException的getCode和getMessage方法来获得

goto语句

复制--若XXX员工的工资小于奖金的 3倍,则为该员工的工资增加30%。 declare v_empno employee.empno%type; v_sal employee.sal%type; v_comm employee.comm%type; begin v_empno := &请输入员工编号; select sal,comm into v_sal,v_comm from employee where empno=v_empno; if v_sal<nvl(v_comm,0)*3 then goto updating; end if; --定义标号 <<updating>> update employee set sal=sal+sal*0.3 where empno=v_empno; commit; <<quit>> null; --空语句,什么都不做 end; /

转载于:https://www.cnblogs.com/chaoyang123/p/11549473.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)