sql 异常处理 例子

/*******************
异常处理
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;







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值