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

如何在Quarkus反应式Oracle客户端中设置存储过程OUT参数?

解决quarkus-reactive-oracle-client调用存储过程的OUT参数问题

要正确声明并处理OUT类型参数,不能用普通Tuple的占位字符串,得借助Vert.x Oracle Client原生的OracleTuple来指定参数方向和类型,以下是具体实现:

关键步骤与代码示例

  1. 导入必要类
import io.vertx.oracleclient.OracleParameter;
import io.vertx.oracleclient.OracleTuple;
import io.vertx.mutiny.oracleclient.MutinyOraclePreparedQuery;
  1. 构建包含OUT参数的元组
    用OracleTuple.Builder明确标记参数类型和方向,替换原来的Tuple.of():
// 创建元组构建器
OracleTuple.Builder tupleBuilder = OracleTuple.builder();
// 添加IN参数:对应存储过程的第一个输入参数
tupleBuilder.addValue(contract);
// 添加OUT参数:第二个参数,需指定存储过程中定义的参数类型
// 示例为VARCHAR类型,根据实际场景替换(比如OracleParameter.CLOB、OracleParameter.XMLTYPE等)
tupleBuilder.addOutParameter(OracleParameter.VARCHAR);

OracleTuple params = tupleBuilder.build();
  1. 执行存储过程并获取OUT参数
    转换为原生Vert.x查询对象执行,执行后可从OracleTuple中读取填充后的OUT参数值:
MutinyOraclePreparedQuery query = client.preparedQuery("{CALL RSMFE02PCK.GET_ALL_XML(?,?)}");

Uni<RowSet<Row>> rowSet = query.toVertx()
        .execute(params)
        .onItem().transform(result -> {
            // 读取OUT参数值:索引对应参数位置(第二个参数索引为1)
            String outParamValue = params.getString(1);
            // 这里可根据业务需求处理OUT参数,比如打印、存入变量等
            return result;
        })
        .convert().toUni();

// 后续处理返回的行集数据
return rowSet.onItem().transformToMulti(set -> Multi.createFrom().iterable(set))
        .onItem().transform(row -> row.getString(0));

注意事项

  • 确保quarkus-reactive-oracle-client版本为较新版本(推荐2.15+),早期版本对OUT参数支持有限。
  • addOutParameter的参数类型必须与存储过程中OUT参数的定义完全匹配,比如存储过程返回XMLType则用OracleParameter.XMLTYPE。
  • OUT参数的值会在执行后被自动填充到OracleTuple中,通过索引(从0开始)即可获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:56:09