326.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 结果。最后一个参数是 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)
326.4.1. IN 参数 复制链接链接已复制到粘贴板!
IN 参数取四个部分,用空格分开:参数名称、SQL 类型(扩展)、类型名称和值源。
参数名称是可选的,如果不提供,则会自动生成。它必须在引号(')之间指定。
SQL 类型是必需的,可以是整数(正数或负数)或引用某些类中的整数字段。如果 SQL 类型包含一个点,则组件会尝试解析该类并读取给定字段。例如,com.Foo.INTEGER
从类 com.Foo
的字段读取。如果类型不包含逗号,那么要解析整数值的类将为 java.sql.Types
。类型可以通过扩展(如 DECIMAL (10))表示表示 scale 10 的 java.sql.Types.DECIMAL
。
类型名称是可选的,必须在引号(')之间给定。
值源是必需的。值源从 Exchange 填充参数值。它可以是简单表达式或标头位置,例如 ::#<header name>
。例如,简单表达式 ${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
字段的 INTEGER 字段读取,并且扩展将设置为 10。参数的输入值从标题 "srcValue" 传递。
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
URI 与之前在 前面相同,但 SQL-type 是 100,类型名称为 "mytypename"。
实际调用将通过 org.springframework.jdbc.core.SqlParameter 进行。