不限空间的免费网站,唐山丰南建设局网站,厦门自己建网站,wordpress对虚拟主机的要求目录
1. -- 什么是异常
2. 如何捕获预定义异常?
3.捕获异常的两个函数
SQLCODE :为错误代码返回一个数值
SQLERRM : 返回字符串的数据,包含了与错误相关的信息. 1. -- 什么是异常
DECLARE
V_JOB EMP.JOB%TYPE;
BEGIN
SELECT JOB INTO V_JOB FROM EMP WHERE JOB CLERK;
D…目录
1. -- 什么是异常
2. 如何捕获预定义异常?
3.捕获异常的两个函数
SQLCODE :为错误代码返回一个数值
SQLERRM : 返回字符串的数据,包含了与错误相关的信息. 1. -- 什么是异常
DECLARE
V_JOB EMP.JOB%TYPE;
BEGIN
SELECT JOB INTO V_JOB FROM EMP WHERE JOB CLERK;
DBMS_OUTPUT.put_line(V_JOB);
END;
--出现的错误信息 ORA-01422: 实际返回的行数超出请求的行数 ORA-06512: 在 line 4
-- 本身语法不存在错误,在运行期间发生的错误就被称为异常.当一个异常发生时,这个程序块,被终止.
语法:
EXCEPTION WHEN EX_NAME THEN statement1WHEN EX_NAME2 THEN statement2when others then statement3
-- 对上面的语句进行修改
DECLARE
V_JOB EMP.JOB%TYPE:请输入职业;
BEGIN
SELECT JOB INTO V_JOB FROM EMP WHERE JOB V_JOB;
DBMS_OUTPUT.put_line(V_JOB); EXCEPTION WHEN TOO_MANY_ROWS THENDBMS_OUTPUT.put_line(该语句提取多行数据,可以使用游标来解决!);
END;
-- 使用了 EXCEPTION 进行异常的抓取,并重新定义异常输出 -- 添加了异常后,语句依然存在多行提取的问题,但是代码可以正常执行了. -- 当一个异常抛出时,程序的控制流程就转移到所定义的异常段,并且执行该异常段的所有语句
2. 如何捕获预定义异常?
-- 就是在对应的异常中引用这个预定义异常的名字 -- 案例:
DECLARE
V_SAL NUMBER;
BEGIN-- INSERT INTO EMP(EMPNO,SAL) VALUES (7369,1000);
SELECT
E.SAL
INTO
V_SAL
FROM EMP E
WHERE EMPNO9999;EXCEPTION WHEN DUP_VAL_ON_INDEX THENDBMS_OUTPUT.PUT_LINE(违反了唯一性约束!);WHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(没有找到数据!);WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(其他错误);
END;
3.捕获异常的两个函数
当一个异常发生时,可以通过使用这两个函数来标识相关的错误代码和错误信息,从而基于错误代码的值,或者错误信息决定下一步操作.
SQLCODE :为错误代码返回一个数值
负数: 其他 ORACLE 服务其的错误代码 0 : 没有遇到异常 1 : 用户定义的异常
SQLERRM : 返回字符串的数据,包含了与错误相关的信息.
-- 创建一个存放异常信息的表
CREATE TABLE ERROR1
(
USER_NAME VARCHAR2(10),
ERR_DATE DATE ,
ERR_CODE NUMBER,
ERR_MESSAGE VARCHAR2(200)
);
-- 写一个程序,将发生的异常状况信息,存入到表中
DECLARE
-- 定义变量
V_EMPNO EMP.EMPNO%TYPE:请输入员工编号; -- 定义获取异常的变量
V_ERR_CODE NUMBER;
V_ERR_MESSAGE VARCHAR2(200);
BEGININSERT INTO EMP (EMPNO) VALUES (V_EMPNO);EXCEPTION WHEN OTHERS THEN ROLLBACK;V_ERR_CODE:SQLCODE;V_ERR_MESSAGE:SQLERRM;-- 将错误信息插入到表中
INSERT INTO ERROR1 (USER_NAME,ERR_DATE,ERR_CODE,ERR_MESSAGE)VALUES(USER,SYSDATE,V_ERR_CODE,V_ERR_MESSAGE);-- 提交数据
END;
SELECT * FROM ERROR1;