oracle 存储过程实例-4

--错误处理部分。
--自定义异常处理
CREATE OR REPLACE PROCEDURE stu_proc
(
  --多个用逗号隔开
  v_id IN NUMBER
) IS
  --多个用分号隔开
  v_max_id NUMBER;
  v_name VARCHAR2(20);
 [color=red] myerror EXCEPTION; [/color]
BEGIN
  SELECT MAX(a.id) INTO v_max_id FROM student a;
  IF v_id>v_max_id THEN
    [color=red]RAISE myerror;[/color]
  END IF;
  SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id;
  dbms_output.put_line('学生名称为:'||v_name);
EXCEPTION
 [color=red] WHEN myerror THEN [/color]
    [color=red]RAISE_APPLICATION_ERROR(-20010, 'v_id not exists!');[/color]
  WHEN NO_DATA_FOUND THEN 
    RAISE_APPLICATION_ERROR(-20011, 'ERROR:不存在!');
END stu_proc;
--自定义异常处理
CREATE OR REPLACE PROCEDURE stu_proc
(
--多个用逗号隔开
v_id IN NUMBER
) IS
--多个用分号隔开
v_max_id NUMBER;
v_name VARCHAR2(20);
v_raise EXCEPTION;
BEGIN
SELECT MAX(a.id) INTO v_max_id FROM student a;
IF v_id>v_max_id THEN
RAISE v_raise;
END IF;
SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id;
dbms_output.put_line('学生名称为:'||v_name);
EXCEPTION
WHEN v_raise THEN
RAISE_APPLICATION_ERROR(-20010, 'v_id not exists!');
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20011, 'ERROR:不存在!');
END stu_proc;


OTHERS表示除了声明外的任意错误。[color=red]SQLERRM是系统内置变量保存了当前错误的详细信息[/color]。


EXCEPTION


WHEN OTHERS THEN
vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);


ROLLBACK;


--把当前错误记录进日志表。


INSERT INTO LOG_INFO(proc_name,error_info,op_date)
VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);
COMMIT;
RETURN;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值