如何从MYSQL存储过程中检索OUT参数到Pentaho Data Integration(Kettle)中的流?

时间:2014-05-03 11:58:40

标签: mysql stored-procedures pentaho kettle

我无法使用Pentaho Kettle的过程调用步骤在输出流中获取MySQL过程调用的OUT参数。

我很难从MYSQL存储过程中检索OUT参数到流。我认为它可能是一种bug,因为它只出现在Integer out参数中,它与String out参数一起使用。我得到的例外是:

Invalid value for getLong() - '

我认为参数设置正确,你可以在ktr中看到。

您可以通过以下方式复制错误:

模式

create schema if not exists test;
use test;
DROP PROCEDURE IF EXISTS procedure_test;
delimiter $$
CREATE PROCEDURE procedure_test(IN in_param INT UNSIGNED, OUT out_param INT UNSIGNED)
 BEGIN
  SET out_param := in_param;
 END
$$

KTR 您可以download here .ktr文件中的步骤。您只需设置与MySQL测试模式的连接即可尝试。

其他数据

  • MySQL连接器:5.1.30
  • MySQL版本:5.5
  • 水壶版:5.0.1-stable
  • OS:Ubuntu 12.04

社区的任何帮助都将受到高度赞赏。

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果将number(以及数据库级别的decimal)用作输出参数类型,则似乎不会发生错误。所以这可以用作解决方法。

使用此语句的DB过程(由phpMyAdmin返回):

CREATE DEFINER = `root`@`localhost` 
     PROCEDURE `procedure_test` ( IN `in_param` INT ZEROFILL, 
                                  OUT `out_param` DECIMAL( 10 ) ) 
     NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 
     BEGIN 
        SET out_param =2 * in_param;
     END

我能够运行此转换

enter image description here

阅读此输入

IN_VALUE
1
2
3
99

产生此输出

<?xml version="1.0" encoding="UTF-8"?>
<Rows>
  <Row><OUT_VALUE> 2,0</OUT_VALUE> </Row>
  <Row><OUT_VALUE> 4,0</OUT_VALUE> </Row>
  <Row><OUT_VALUE> 6,0</OUT_VALUE> </Row>
  <Row><OUT_VALUE> 198,0</OUT_VALUE> </Row>
</Rows>

答案 1 :(得分:0)

我已经使用SQL脚本步骤解决了这个问题,如下所示:

CALL procedure_test(?, @output_value);
INSERT INTO output_value_for(in, out) VALUES (?, @output_value);

SQL脚本步骤不允许输出值流,但它是我的问题的更好的解决方案。程序执行后,我插入了MySQL数据库输出值的程序因为我需要坚持这个关系。

但是,我认为马库斯的回答是提出问题的更好方法。如果您遇到此问题,则应将其考虑在内。