exec StoredProcedure传递整数数组?

时间:2018-04-04 07:03:00

标签: voltdb

我有一个存储过程,其中有什么东西IN? .....

我找不到任何关于如何使用" exec"来调用此过程的文档。 我尝试了所有组合

exec bestThumbs([[324622,321235]]); 过程的参数计数无效:bestThumbs(预期:1,收到:2)

exec bestThumbs [324622,321235,3454345]; 过程的参数计数无效:bestThumbs(预期:1,收到:3)

exec bestThumbs [[324622,321235,3454345]]; 过程的参数计数无效:bestThumbs(预期:1,收到:3)

此外,尝试通过JSON接口在PHP中执行相同操作:

$a = array([163195,163199,163196]);
$params = json_encode($a);
$params = urlencode($params);
$querystring = "Procedure=$proc&Parameters=$params";

返回:VOLTDB ERROR:PROCEDURE bestThumbs TYPE ERROR FOR PARAMETER 0:org.voltdb.VoltTypeException:tryScalarMakeCompatible:无法匹配参数数组:int to provided long

这样做的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

VoltDB的sqlcmd接口和PHP客户端库不支持数组参数。一些其他客户端库可以。

如果您正在使用java过程,您可以将数组数组格式化为字符串并拆分字符串并解析过程中的值,然后构建一个int []或long []以传递给voltQueueSQL()调用SQLStmt。

但是,如果您的过程的唯一输入是一个整数数组,请记住,我建议的串联String参数不允许对该过程进行分区。即使您使用的是支持数组参数的客户端库(如python或java),也无法对作为数组的参数进行分区。这意味着它必须是在所有分区中运行的多分区过程。如果然后对过程进行分区以使其仅基于该输入值在一个分区中运行,则具有采用单个参数值的过程将具有更大的可伸缩性。如果客户端具有要评估的值数组,则可以遍历该数组并对该过程进行单独调用,每个调用仅在一个分区上执行。

我在VoltDB工作。