exec StoredProcedure 传递整数数组?
exec StoredProcedure passing Array of Integers?
我有一个存储过程,其中包含 .. WHERE something 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";
returns:VOLTDB 错误:过程 bestThumbs 参数 0 的类型错误:org.voltdb.VoltTypeException:tryScalarMakeCompatible:无法将参数 array:int 与提供的 long
匹配
这样做的正确方法是什么?
谢谢!
VoltDB 的 sqlcmd 接口和 PHP 客户端库不支持数组参数。其他一些客户端库可以。
如果您使用的是 java 过程,您可以将数字数组格式化为字符串并拆分字符串并解析过程中的值,然后构建一个 int[] 或 long[] 以调用 SQLStmt 时传入 voltQueueSQL()。
但是,如果您的过程的唯一输入是整数数组,请记住,如我所建议的,串联的字符串参数不允许对过程进行分区。即使您使用支持数组参数的 python 或 java 等客户端库,也无法根据数组参数对过程进行分区。这意味着它必须是在所有分区中运行的 multi-partition 过程。如果您随后对该过程进行分区,使其仅在基于该输入值的一个分区中运行,那么拥有一个采用单个参数值的过程将更具可扩展性。如果客户端有一组要评估的值,您可以遍历该数组并分别调用该过程,每个过程仅在一个分区上执行。
我在 VoltDB 工作。
我有一个存储过程,其中包含 .. WHERE something 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";
returns:VOLTDB 错误:过程 bestThumbs 参数 0 的类型错误:org.voltdb.VoltTypeException:tryScalarMakeCompatible:无法将参数 array:int 与提供的 long
匹配这样做的正确方法是什么?
谢谢!
VoltDB 的 sqlcmd 接口和 PHP 客户端库不支持数组参数。其他一些客户端库可以。
如果您使用的是 java 过程,您可以将数字数组格式化为字符串并拆分字符串并解析过程中的值,然后构建一个 int[] 或 long[] 以调用 SQLStmt 时传入 voltQueueSQL()。
但是,如果您的过程的唯一输入是整数数组,请记住,如我所建议的,串联的字符串参数不允许对过程进行分区。即使您使用支持数组参数的 python 或 java 等客户端库,也无法根据数组参数对过程进行分区。这意味着它必须是在所有分区中运行的 multi-partition 过程。如果您随后对该过程进行分区,使其仅在基于该输入值的一个分区中运行,那么拥有一个采用单个参数值的过程将更具可扩展性。如果客户端有一组要评估的值,您可以遍历该数组并分别调用该过程,每个过程仅在一个分区上执行。
我在 VoltDB 工作。