获取存储过程camel-sql的输出参数

时间:2016-01-08 22:13:32

标签: java sql-server stored-procedures apache-camel

我正在使用camel编写一些路由并在JBoss Fuse 6.2中运行它们。

我想在SQL Server数据库中执行存储过程并读取输出参数的值。

我正在做这件事:

from("direct:WRITE_IN_STORED_PROCEDURE")
    .to("sql:exec PROCEDIMIENTO_TEST 'TEST_DATA'?dataSource=dataSource")
    .log(LoggingLevel.INFO, "[${body}]");

这条路线实际上是在数据库中写的,我检查过了值' TEST_DATA'根据存储过程逻辑在数据库中。

问题是:我不知道如何传递以及如何读取OUT参数。 " exec"调用不是将程序的结果放在正文中(就像我使用"选择")。

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

sql组件尚不支持存储过程。

有一张票:https://issues.apache.org/jira/browse/CAMEL-4725

工作中有代码:https://github.com/apache/camel/pull/749

例如,您可以使用mybatis组件,因为mybatis支持调用存储过程:http://camel.apache.org/mybatis

答案 1 :(得分:-1)

语法应该与下面的db:mysql中的调用完全相似

mysql>delimiter // 
mysql>create procedure selectusers(out param1 int) begin select count(*)
   from mysql.user; end//
mysql> delimiter ;
mysql> call selectusers(@param1);
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

与驼峰相似,你的路线现在看起来如下

<to uri="sql:exec call selectusers(@param1)?datasource=datasource/>
The result if you print would be as below
[) thread #0 - file://src/data/] rhalling-unmarshalling-exmaple INFO  [{count(*)=2}]