二、代码模板:多条件判断跳转自定义异常且回滚
DECLARE
-- 声明自定义异常
value_too_high EXCEPTION;
status_invalid EXCEPTION;
-- 示例变量(可根据实际需求修改)
input_value NUMBER := 150; -- 输入值
status_flag VARCHAR2(10) := 'X'; -- 状态标志
BEGIN
-- 第一个条件检查:数值是否过大
IF input_value > 100 THEN
RAISE value_too_high;
END IF;
-- 第二个条件检查:状态是否有效
IF status_flag NOT IN ('A', 'B', 'C') THEN
RAISE status_invalid;
END IF;
-- 正常业务逻辑(示例DML操作)
-- 这里可以放置实际的INSERT/UPDATE/DELETE语句
DBMS_OUTPUT.PUT_LINE('执行DML操作...');
-- 示例:UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
-- 提交事务(只有当所有检查通过时)
COMMIT;
DBMS_OUTPUT.PUT_LINE('操作成功完成,事务已提交');
EXCEPTION
-- 捕获第一个自定义异常
WHEN value_too_high THEN
DBMS_OUTPUT.PUT_LINE('错误: 输入值 ' || input_value || ' 超过最大允许值(100)');
ROLLBACK; -- 回滚事务
DBMS_OUTPUT.PUT_LINE('事务已回滚');
-- 捕获第二个自定义异常
WHEN status_invalid THEN
DBMS_OUTPUT.PUT_LINE('错误: 状态标识 "' || status_flag || '" 无效,应为A/B/C');
ROLLBACK; -- 回滚事务
DBMS_OUTPUT.PUT_LINE('事务已回滚');
-- 默认异常捕获(处理所有未预期异常)
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生未预期的错误: ' || SQLERRM);
ROLLBACK; -- 回滚事务
DBMS_OUTPUT.PUT_LINE('事务已回滚');
END;
浙公网安备 33010602011771号