327.4. 声明存储的步骤模板
模板通过与 Java 方法签名类似的语法进行声明。存储的流程的名称,然后是用括号括起的参数。解释了这个示例:
<to uri="sql-stored:STOREDSAMPLE(INTEGER ${headers.num1},INTEGER ${headers.num2},INOUT INTEGER ${headers.num3} result1,OUT INTEGER result2)"/>
<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 结果。last 参数是 OUT 值,也是 INTEGER 类型。
在 SQL 术语中,存储的流程可以声明为:
CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)
CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)
327.4.1. IN 参数 复制链接链接已复制到粘贴板!
IN 参数采用以空格号分隔的四个部分:参数名称、SQL 类型(缩放)、类型名称和值源。
参数名称是可选的,如果未提供,则会自动生成。它必须在 quotes (')之间指定。
SQL 类型是必需的,可以是整数(正数或负数)或引用某些类中的整数字段。如果 SQL 类型包含点,则组件会尝试解析该类并读取给定字段。例如,SQL 类型 com.Foo.INTEGER
从类 com.Foo
的字段 INTEGER 读取。如果类型不包含逗号,则用于解析整数值的类将是 java.sql.Types
。类型可以通过缩放来 postfixed,如 DECIMAL (10)意味着 java.sql.Types.DECIMAL
带有 scale 10。
类型名称是可选的,必须在 quotes (')之间指定。
值源是必需的。值源从 Exchange 填充参数值。它可以是简单表达式或标头位置,例如 :#<header name&
gt;。例如,简单表达式 ${header.val}
表示该参数值将从标题"val"中读取。标头位置表达式 :#val 的作用相同。
<to uri="sql-stored:MYFUNC('param1' org.example.Types.INTEGER(10) ${header.srcValue})"/>
<to uri="sql-stored:MYFUNC('param1' org.example.Types.INTEGER(10) ${header.srcValue})"/>
URI 表示将以参数名"param1"调用,它的 SQL 类型是从类 org.example.Types
和 scale 的字段 INTEGER 读取的。参数的输入值从标头 "srcValue" 传递。
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
URI 与之前 上的 URI 相同,但 SQL-type 为 100,类型名称为 "mytypename"。
实际调用将使用 org.springframework.jdbc.core.SqlParameter 来完成。
327.4.2. OUT 参数 复制链接链接已复制到粘贴板!
OUT 参数的工作方式类似,并包含三个部分:SQL 类型(带有 scale)、类型名称和输出参数名称。
SQL 类型的工作方式与 IN 参数相同。
类型名称是可选的,还可与 IN 参数相同。
输出参数名称用于 OUT 参数名称,以及存储结果的标头名称。
<to uri="sql-stored:MYFUNC(OUT org.example.Types.DECIMAL(10) outheader1)"/>
<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)"/>
<to uri="sql-stored:MYFUNC(OUT org.example.Types.NUMERIC(10) 'mytype' outheader1)"/>
这与前一个相同,但类型名称为 "mytype"。
实际调用将使用 org.springframework.jdbc.core.SqlOutParameter
来完成。
327.4.3. INOUT 参数 复制链接链接已复制到粘贴板!
INOUT 参数是以上所有参数的组合。它们从交换接收值,并存储结果作为消息标头。唯一的注意事项是跳过 IN 参数的"name"。相反,OUT 参数的"name"同时定义了 SQL 参数名称以及结果标头名称。
<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)"/>
<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)"/>
实际调用将使用 org.springframework.jdbc.core.SqlInOutParameter 来完成。