在Pentaho数据集成(Kettle)中,如何从MYSQL存储过程中检索出参数以流式传输?

在Pentaho数据集成(Kettle)中,如何从MYSQL存储过程中检索出参数以流式传输?,mysql,stored-procedures,pentaho,kettle,Mysql,Stored Procedures,Pentaho,Kettle,我无法使用Pentaho Ketter的过程调用步骤在输出流中获取MySQL过程调用的OUT参数 我在从MYSQL存储过程中检索参数到流时遇到了很大的困难。我认为这可能是一种错误,因为它只出现在整数输出参数中,它与字符串输出参数一起工作。我得到的例外是: Invalid value for getLong() - ' 我认为参数设置正确,正如您在ktr中看到的那样 您可以通过以下方式复制错误: 模式 create schema if not exists test; use test; DRO

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

我在从MYSQL存储过程中检索参数到流时遇到了很大的困难。我认为这可能是一种错误,因为它只出现在整数输出参数中,它与字符串输出参数一起工作。我得到的例外是:

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 您可以使用以下步骤创建.ktr文件。您只需设置到MySQL测试模式的连接即可尝试

其他数据

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
$$
  • MySQL连接器:5.1.30
  • MySQL版本:5.5
  • 水壶版本:5.0.1-stable
  • 操作系统:Ubuntu 12.04
我们将非常感谢社区的任何帮助


提前谢谢

如果将
number
(和
decimal
在DB级别)用作输出参数类型,则该错误似乎不会发生。所以这可以作为一种变通方法

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

我能够运行这个转换

读取此输入

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>

2,0 
4,0 
6,0 
198,0 

我已使用SQL脚本步骤解决了此问题,其中包含以下SQL:

CALL procedure_test(?, @output_value);
INSERT INTO output_value_for(in, out) VALUES (?, @output_value);
SQL脚本步骤不允许输出值流式传输,但对于我的问题,这是一个更好的解决方案。在过程执行之后,我在MySQL数据库中插入了过程的输出值,因为我需要保持这种关系


然而,我认为马库斯的答案是解决问题的更好方法。如果您有此问题,应将其作为解决方法加以考虑。

我在SQL Server输出参数方面也有类似的问题。最后不得不绕开程序。如果有解决方案,我还没有看到。我可以使用
OUT
INT
参数重现错误。然而,
NUMBER
VARCHAR
都起作用了!你好,马库斯,谢谢你的反馈!!我又试了一次,但我无法使它与数字一起工作。它确实与VARCHAR一起工作。你确定你能成功吗?例如,尝试输入数字99。你能把ktr寄给我吗?如果你给我发邮件,我会把ktr寄给你。查看我的个人资料。你好,马库斯,谢谢你的回答和解决办法。但是,我无法更改过程定义。输出值必须为INT无符号:-(您可以使用包装器吗?我将您的答案标记为已接受的答案,因为它解决了在流中输出数据的问题。但是我使用了我在答案中解释的方法。再次感谢您的兴趣。我在尝试获取inout Parameter值时遇到了同样的问题。有人知道如何将小数转换回整数吗?我很抱歉我稍后在流中遇到一个问题,它试图将十进制值插入整数字段,但转换失败。