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

如何在WSO2 Micro Integrator中调用含多入参出参的存储过程

在WSO2 Micro Integrator中调用带IN/OUT参数的存储过程

前提准备

  1. 配置数据库数据源
    在WSO2 Micro Integrator的deployment.toml中添加Oracle数据源配置(适配示例中的Oracle存储过程):
[database.datasource.MyOracleDS]
url = "jdbc:oracle:thin:@//localhost:1521/ORCL"
username = "你的数据库用户名"
password = "你的数据库密码"
driver_class_name = "oracle.jdbc.OracleDriver"

将Oracle驱动包(如ojdbc8.jar)放入MI的repository/components/lib目录,重启MI生效。

  1. 确保Integration Studio已关联该MI环境,可在数据源视图中测试连接是否正常。

调用单IN单OUT参数的存储过程

以你提供的SAY_HELLO存储过程为例,使用dblookup mediator实现调用并获取OUT参数:

ESB序列配置

<sequence name="CallSayHelloProcSeq" xmlns="http://ws.apache.org/ns/synapse">
    <!-- 定义IN参数值,可从请求上下文或直接赋值 -->
    <property name="FULLNAME" value="Jean-Paul Abi-Ghosn" scope="default" type="STRING"/>
    
    <!-- 调用存储过程并提取OUT参数 -->
    <dblookup>
        <connection>
            <pool>
                <dsName>MyOracleDS</dsName>
            </pool>
        </connection>
        <statement>
            <!-- 使用CALL语法调用存储过程,?为参数占位符 -->
            <sql><![CDATA[CALL SAY_HELLO(?, ?)]]></sql>
            <!-- 绑定IN参数,类型与存储过程匹配 -->
            <parameter type="VARCHAR" value="$ctx:FULLNAME"/>
            <!-- 声明OUT参数,指定方向和参数名 -->
            <parameter type="VARCHAR" direction="OUT" name="RESPONSE"/>
        </statement>
        <!-- 将OUT参数值存入指定属性 -->
        <result name="helloResponse" column="RESPONSE"/>
    </dblookup>
    
    <!-- 日志输出验证结果 -->
    <log level="custom">
        <property name="存储过程返回结果" expression="$ctx:helloResponse"/>
    </log>
</sequence>

调用多OUT参数的存储过程

如果存储过程包含多个OUT参数,只需扩展parameter和result标签即可。示例如下:

示例存储过程

CREATE OR REPLACE PROCEDURE GET_USER_DETAILS(USER_ID IN NUMBER, USER_NAME OUT VARCHAR2, USER_EMAIL OUT VARCHAR2)
AS
BEGIN
  SELECT NAME, EMAIL INTO USER_NAME, USER_EMAIL FROM USERS WHERE ID = USER_ID;
END;

对应的ESB序列配置

<sequence name="CallUserDetailsProcSeq" xmlns="http://ws.apache.org/ns/synapse">
    <property name="USER_ID" value="1001" scope="default" type="INTEGER"/>
    
    <dblookup>
        <connection>
            <pool>
                <dsName>MyOracleDS</dsName>
            </pool>
        </connection>
        <statement>
            <sql><![CDATA[CALL GET_USER_DETAILS(?, ?, ?)]]></sql>
            <parameter type="INTEGER" value="$ctx:USER_ID"/>
            <parameter type="VARCHAR" direction="OUT" name="USER_NAME"/>
            <parameter type="VARCHAR" direction="OUT" name="USER_EMAIL"/>
        </statement>
        <result name="userName" column="USER_NAME"/>
        <result name="userEmail" column="USER_EMAIL"/>
    </dblookup>
    
    <log level="custom">
        <property name="用户名" expression="$ctx:userName"/>
        <property name="邮箱" expression="$ctx:userEmail"/>
    </log>
</sequence>

关键说明

  • 选择mediator:优先使用dblookup mediator获取OUT参数,dbreport主要用于执行无返回值的数据库写操作,不支持提取输出参数。
  • 参数匹配:parameter标签的type需与存储过程参数类型严格对应(如Oracle的VARCHAR2对应VARCHAR,NUMBER对应INTEGER)。
  • 属性存储:每个OUT参数通过result标签存入独立的Synapse属性,后续可在序列中直接引用。

内容的提问来源于stack exchange,提问作者Jean-Paul Abi-Ghosn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:42