我无法使用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测试模式的连接即可尝试。
其他数据
社区的任何帮助都将受到高度赞赏。
提前致谢!
答案 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
我能够运行此转换
阅读此输入
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数据库输出值的程序因为我需要坚持这个关系。
但是,我认为马库斯的回答是提出问题的更好方法。如果您遇到此问题,则应将其考虑在内。