在Pentaho数据集成(Kettle)中,如何从MYSQL存储过程中检索出参数以流式传输?
我无法使用Pentaho Ketter的过程调用步骤在输出流中获取MySQL过程调用的OUT参数 我在从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
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值时遇到了同样的问题。有人知道如何将小数转换回整数吗?我很抱歉我稍后在流中遇到一个问题,它试图将十进制值插入整数字段,但转换失败。