1

我有一个存储过程,其中有 .. WHERE something IN ?......

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

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

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

执行 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 错误:PROCEDURE bestThumbs 参数 0 类型错误:org.voltdb.VoltTypeException:tryScalarMakeCompatible:无法匹配参数数组:int 到提供的 long

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

谢谢 !

4

1 回答 1

1

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

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

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

我在 VoltDB 工作。

于 2018-04-04T13:57:12.717 回答