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

如何在PL/SQL成功响应中返回警告信息?

PL/SQL REST接口返回199状态码及警告信息示例

在PL/SQL中实现REST接口返回199状态码并附带警告信息,核心是通过Oracle REST Data Services (ORDS) 提供的工具包设置响应头,同时构造包含警告提示的响应体。以下是完整的示例代码:

CREATE OR REPLACE PROCEDURE create_record(
    p_id IN NUMBER,
    p_name IN VARCHAR2
) AS
    v_existing_record your_table%ROWTYPE; -- 直接使用表的行类型
    v_response_json CLOB;
BEGIN
    -- 检查目标记录是否已存在
    SELECT *
    INTO v_existing_record
    FROM your_table
    WHERE id = p_id;
    
    -- 执行到此处说明记录已存在,设置199状态码
    owa_util.set_response_header('Status', '199 Success (Record Exists)', TRUE);
    
    -- 构造带警告的JSON响应
    v_response_json := JSON_OBJECT(
        'status' VALUE 'warning',
        'message' VALUE '该记录已存在,无需重复创建',
        'record' VALUE JSON_OBJECT(
            'id' VALUE v_existing_record.id,
            'name' VALUE v_existing_record.name,
            'created_at' VALUE v_existing_record.created_at
        )
    );
    
    htp.print(v_response_json);
    
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        -- 记录不存在,创建新记录
        INSERT INTO your_table(id, name, created_at)
        VALUES(p_id, p_name, SYSTIMESTAMP)
        RETURNING id, name, created_at INTO v_existing_record;
        
        COMMIT;
        
        -- 返回201状态码及创建后的记录
        owa_util.set_response_header('Status', '201 Created', TRUE);
        
        v_response_json := JSON_OBJECT(
            'status' VALUE 'success',
            'message' VALUE '记录创建成功',
            'record' VALUE JSON_OBJECT(
                'id' VALUE v_existing_record.id,
                'name' VALUE v_existing_record.name,
                'created_at' VALUE v_existing_record.created_at
            )
        );
        
        htp.print(v_response_json);
    WHEN OTHERS THEN
        -- 处理其他异常,返回500错误
        owa_util.set_response_header('Status', '500 Internal Server Error', TRUE);
        
        v_response_json := JSON_OBJECT(
            'status' VALUE 'error',
            'message' VALUE SQLERRM
        );
        
        htp.print(v_response_json);
END;
/

关键代码说明

  1. 状态码配置:通过owa_util.set_response_header手动指定响应状态码,第二个参数遵循"状态码 描述"格式,第三个参数TRUE用于覆盖默认状态码。
  2. 响应体构造:使用JSON_OBJECT生成结构化的JSON响应,包含状态标识、提示信息和完整记录数据,方便客户端解析处理。
  3. 存在性判断:通过捕获NO_DATA_FOUND异常区分记录是否存在,逻辑清晰且符合PL/SQL的异常处理习惯。

适配提示

  • 将代码中的your_table替换为实际业务表名,并根据表结构调整SELECT、INSERT语句中的字段。
  • 如果需要自定义记录类型,可替换your_table%ROWTYPE为自定义的RECORD类型。
  • 部署为REST端点时,需确保ORDS已正确配置该存储过程的权限和路径映射。

内容的提问来源于stack exchange,提问作者nightfox79

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:39:59