You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PL/SQL中自定义并抛出SQLException?

PL/SQL自定义并抛出异常的方法

在PL/SQL里,你可以通过两种常见方式自定义并抛出自己的异常,满足业务场景的错误处理需求:

方式一:声明自定义异常变量

这种方式适合需要单独定义特定业务异常的场景,步骤清晰直接:

  1. 在DECLARE块中声明自定义异常
  2. 在业务逻辑中用RAISE语句触发异常
  3. 在EXCEPTION块中捕获并处理该异常

代码示例

DECLARE
    c_id customers.id%type := 1;
    c_name customers.name%type;
    c_age customers.age%type;
    -- 声明自定义异常
    invalid_customer_age EXCEPTION;
BEGIN
    SELECT name, age INTO c_name, c_age
    FROM customers
    WHERE id = c_id;

    -- 业务判断:如果客户年龄小于18,抛出自定义异常
    IF c_age < 18 THEN
        RAISE invalid_customer_age;
    END IF;

    DBMS_OUTPUT.PUT_LINE('Name: ' || c_name || ', Age: ' || c_age);
EXCEPTION
    WHEN no_data_found THEN
        dbms_output.put_line('No such customer!');
    WHEN invalid_customer_age THEN
        dbms_output.put_line('Error: Customer age cannot be less than 18!');
    WHEN others THEN
        dbms_output.put_line('Unknown error occurred!');
END;

方式二:使用RAISE_APPLICATION_ERROR直接抛出带错误码的异常

如果需要抛出类似系统级SQLException的自定义异常(带错误代码和详细消息),用RAISE_APPLICATION_ERROR函数更合适。它允许你使用Oracle预留的用户自定义错误码范围(-20000到-20999),无需提前声明异常变量。

代码示例

DECLARE
    c_id customers.id%type := 2;
    c_name customers.name%type;
    c_addr customers.address%type;
BEGIN
    SELECT name, address INTO c_name, c_addr
    FROM customers
    WHERE id = c_id;

    -- 业务判断:如果地址为空,抛出带错误码的自定义异常
    IF c_addr IS NULL OR c_addr = '' THEN
        RAISE_APPLICATION_ERROR(-20001, 'Customer address cannot be empty!');
    END IF;

    DBMS_OUTPUT.PUT_LINE('Name: ' || c_name || ', Address: ' || c_addr);
EXCEPTION
    WHEN no_data_found THEN
        dbms_output.put_line('No such customer!');
    WHEN OTHERS THEN
        -- 捕获并打印错误码和消息
        dbms_output.put_line('Error Code: ' || SQLCODE || ', Error Message: ' || SQLERRM);
END;

执行结果示例

触发自定义异常时会输出:

Error Code: -20001, Error Message: ORA-20001: Customer address cannot be empty!
PL/SQL procedure successfully completed.

内容的提问来源于stack exchange,提问作者Aniketh B R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:50:33