/*******************
异常处理
EXCEPTION 关键词开始异常处理部分
*******************/
--预定义的Oracle 数据库异常
DECLARE
v_student tb_student%ROWTYPE;
BEGIN
SELECT *
INTO v_student
FROM tb_student WHERE ID = 1;
dbms_output.put_line('id: ' || v_student.id);
dbms_output.put_line('name: ' || v_student.NAME);
--处理异常
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('数据没有找到!');
WHEN too_many_rows THEN
dbms_output.put_line('返回多行数据!');
WHEN OTHERS THEN
dbms_output.put_line('other!');
END;
--自定义异常
DECLARE
myerror EXCEPTION;
BEGIN
RAISE myerror;
dbms_output.put_line('test');
--处理异常
EXCEPTION
WHEN myerror THEN
dbms_output.put_line('接到自定义异常!');
WHEN OTHERS THEN
dbms_output.put_line('other!');
END;
--工作中最常用的情况,通常将异常信息写入数据表
CREATE TABLE tb_error(
ID INT PRIMARY KEY,
OBJECT VARCHAR2(18), --抛出异常的对象
CODE VARCHAR2(50), --异常代码
message VARCHAR2(200), --异常信息
currdate DATE
);
CREATE SEQUENCE seq_tb_error;
SELECT * FROM tb_error;
DECLARE
v_student tb_student%ROWTYPE;
v_code VARCHAR2(50);
v_message VARCHAR2(200);
BEGIN
SELECT *
INTO v_student
FROM tb_student;
dbms_output.put_line('id: ' || v_student.id);
dbms_output.put_line('name: ' || v_student.NAME);
--处理异常
EXCEPTION
WHEN OTHERS THEN
-- SQLCODE:返回错误代码
--SQLERRM:返回与错误代码关联的消息
v_code := SQLCODE;
v_message:=SQLERRM;
INSERT INTO tb_error(ID,object,code,message,currdate)
VALUES(seq_tb_error.nextval,'testplsql',v_code,v_message,SYSDATE);
COMMIT;
END;
异常处理
EXCEPTION 关键词开始异常处理部分
*******************/
--预定义的Oracle 数据库异常
DECLARE
v_student tb_student%ROWTYPE;
BEGIN
SELECT *
INTO v_student
FROM tb_student WHERE ID = 1;
dbms_output.put_line('id: ' || v_student.id);
dbms_output.put_line('name: ' || v_student.NAME);
--处理异常
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('数据没有找到!');
WHEN too_many_rows THEN
dbms_output.put_line('返回多行数据!');
WHEN OTHERS THEN
dbms_output.put_line('other!');
END;
--自定义异常
DECLARE
myerror EXCEPTION;
BEGIN
RAISE myerror;
dbms_output.put_line('test');
--处理异常
EXCEPTION
WHEN myerror THEN
dbms_output.put_line('接到自定义异常!');
WHEN OTHERS THEN
dbms_output.put_line('other!');
END;
--工作中最常用的情况,通常将异常信息写入数据表
CREATE TABLE tb_error(
ID INT PRIMARY KEY,
OBJECT VARCHAR2(18), --抛出异常的对象
CODE VARCHAR2(50), --异常代码
message VARCHAR2(200), --异常信息
currdate DATE
);
CREATE SEQUENCE seq_tb_error;
SELECT * FROM tb_error;
DECLARE
v_student tb_student%ROWTYPE;
v_code VARCHAR2(50);
v_message VARCHAR2(200);
BEGIN
SELECT *
INTO v_student
FROM tb_student;
dbms_output.put_line('id: ' || v_student.id);
dbms_output.put_line('name: ' || v_student.NAME);
--处理异常
EXCEPTION
WHEN OTHERS THEN
-- SQLCODE:返回错误代码
--SQLERRM:返回与错误代码关联的消息
v_code := SQLCODE;
v_message:=SQLERRM;
INSERT INTO tb_error(ID,object,code,message,currdate)
VALUES(seq_tb_error.nextval,'testplsql',v_code,v_message,SYSDATE);
COMMIT;
END;