138.7. 声明存储的步骤模板


模板使用类似于 Java 方法签名的语法进行声明。存储的步骤的名称,然后用括号括起的参数。一个例子解释了这一点:

<to uri="sql-stored:STOREDSAMPLE(INTEGER ${headers.num1},INTEGER ${headers.num2},INOUT INTEGER ${headers.num3} result1,OUT INTEGER result2)"/>

参数由类型声明,然后使用简单表达式映射到 Camel 消息。因此,在本示例中,前两个参数是 INTEGER 类型的 IN 值,映射到消息标头。第三个参数是 INOUT,这表示它接受 INTEGER,然后返回不同的 INTEGER 结果。最后的参数是 OUT 值,也是 INTEGER 类型。

在 SQL 术语中,存储的步骤可以声明为:

CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)

138.7.1. IN 参数

IN 参数使用由空格分开的四个部分:参数名称、SQL 类型(扩展)、类型名称和值源。

参数名称是可选的,如果未提供会自动生成。它必须在引号(')之间提供。

SQL 类型是必需的,可以是整数(正或负),或引用某些类中的整数字段。如果 SQL 类型包含一个点,则组件会尝试解析该类并读取给定字段。例如,SQL 类型 com.Foo.INTEGER 从类 com.Foo 的 INTEGER 字段读取。如果类型不包含逗号,那么用于解析整数值的类将是 java.sql.Types。类型可以通过扩展(如 DECIMAL (10))改为 java.sql.Types.DECIMAL,扩展为 10。

类型 name 是可选的,必须在引号之间提供。

值源是必需的。值源从 Exchange 填充参数值。它可以是 Simple 表达式或标头位置,例如 :#<header name& gt;。例如,Simple expression ${header.val} 表示参数值将从标题 val 中读取。标头位置表达式 :#val 将有相同的效果。

<to uri="sql-stored:MYFUNC('param1' org.example.Types.INTEGER(10) ${header.srcValue})"/>

URI 表示存储的步骤将使用参数名称 param1 调用,它的 SQL 类型是从类 org.example.Types 的 INTEGER 的 INTEGER 以及 scale 的 INTEGER 读取的。参数的输入值是从标题 srcValue 传递的。

<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>

URI 与之前在 上相同,但 SQL 类型为 100,类型为 mytypename

实际调用将使用 org.springframework.jdbc.core.SqlParameter 来完成。

138.7.2. OUT 参数

OUT 参数的工作方式类似于 IN 参数,并包含三个部分:SQL 类型(具有 scale)、类型名称和输出参数名称。

SQL 类型的工作方式与 IN 参数相同。

类型名称是可选的,它的工作方式与 IN 参数相同。

输出参数名称用于 OUT 参数名称,以及存储结果的标头名称。

<to uri="sql-stored:MYFUNC(OUT org.example.Types.DECIMAL(10) outheader1)"/>

URI 表示 OUT 参数的名称为 outheader1,结果将是标题为 outheader1

<to uri="sql-stored:MYFUNC(OUT org.example.Types.NUMERIC(10) 'mytype' outheader1)"/>

这与前面的名称相同,但类型名称为 mytype

实际调用将使用 org.springframework.jdbc.core.SqlOutParameter 来完成。

138.7.3. INOUT 参数

INOUT 参数是上述所有参数的组合。它们从交换中收到值,以及存储消息头的结果。唯一的注意事项是,IN 参数的"名称"被跳过。相反,OUT 参数 的名称 定义了 SQL 参数名称和结果标头名称。

<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)"/>

实际调用将使用 org.springframework.jdbc.core.SqlInOutParameter 来完成。

138.7.4. 查询超时

您可以在用于查询处理的语句上配置查询超时(via template.queryTimeout),如下所示:

<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)?template.queryTimeout=5000"/>

当在事务级别中指定的超时的事务中执行时,这会被剩余的事务超时覆盖。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部