带有数组参数的 Voltdb 存储过程
Voltdb stored procedures with array parameters
我有一个采用字符串数组 String[]
的 VoltDB 存储过程,它已成功加载,但我似乎无法使用带 exec 的 VoltDB SQL 查询接口来执行存储过程。
也不能在sqlcmd界面执行。
我收到这个错误:
Error: PrepareStatement error: Invalid parameter count for procedure "StoredProcedure" (received: 3, expected: 2, )
如何构造 exec 语句以从 VoltDB 中检索存储过程的结果?
不幸的是,在使用 sqlcmd 接口时,没有好的方法将数组作为参数传递。如果你需要测试这个程序,最好的方法是写一个简单的 java / python 脚本来用数组调用这个程序。在 python 中,它看起来像这样:
#!/usr/bin/env python
from voltdbclient import *
client = FastSerializer("localhost", 21212)
# declare array parameters the same as primitives
fooProc = VoltProcedure( client, "Foo", [FastSerializer.VOLTTYPE_BIGINT])
# the set of all parameters is the outer array, the inner array is the parameter value
fooResponse = fooProc.call( [ [1, 2, 3, 4, 5] ] )
for x in fooResponse.tables:
print x
完全披露:我在 VoltDB 工作。
我有一个采用字符串数组 String[]
的 VoltDB 存储过程,它已成功加载,但我似乎无法使用带 exec 的 VoltDB SQL 查询接口来执行存储过程。
也不能在sqlcmd界面执行。
我收到这个错误:
Error: PrepareStatement error: Invalid parameter count for procedure "StoredProcedure" (received: 3, expected: 2, )
如何构造 exec 语句以从 VoltDB 中检索存储过程的结果?
不幸的是,在使用 sqlcmd 接口时,没有好的方法将数组作为参数传递。如果你需要测试这个程序,最好的方法是写一个简单的 java / python 脚本来用数组调用这个程序。在 python 中,它看起来像这样:
#!/usr/bin/env python
from voltdbclient import *
client = FastSerializer("localhost", 21212)
# declare array parameters the same as primitives
fooProc = VoltProcedure( client, "Foo", [FastSerializer.VOLTTYPE_BIGINT])
# the set of all parameters is the outer array, the inner array is the parameter value
fooResponse = fooProc.call( [ [1, 2, 3, 4, 5] ] )
for x in fooResponse.tables:
print x
完全披露:我在 VoltDB 工作。