如何在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; /
关键代码说明
- 状态码配置:通过
owa_util.set_response_header手动指定响应状态码,第二个参数遵循"状态码 描述"格式,第三个参数TRUE用于覆盖默认状态码。 - 响应体构造:使用
JSON_OBJECT生成结构化的JSON响应,包含状态标识、提示信息和完整记录数据,方便客户端解析处理。 - 存在性判断:通过捕获
NO_DATA_FOUND异常区分记录是否存在,逻辑清晰且符合PL/SQL的异常处理习惯。
适配提示
- 将代码中的
your_table替换为实际业务表名,并根据表结构调整SELECT、INSERT语句中的字段。 - 如果需要自定义记录类型,可替换
your_table%ROWTYPE为自定义的RECORD类型。 - 部署为REST端点时,需确保ORDS已正确配置该存储过程的权限和路径映射。
内容的提问来源于stack exchange,提问作者nightfox79
相关产品推荐
相关产品推荐

