我有一个特例,需要从java调用以下postgresql脚本:
do
$$
DECLARE
xx VARCHAR(200);
xy VARCHAR(200);
xz VARCHAR(200);
yy VARCHAR(200);
BEGIN
xx := ?;
xy := ?;
call database_procedure(yy, yz, xx, xy);
? := yy;
? := yz;
END;
$$
此脚本按以下方式传递给callablestatement,输入/输出参数与callable语句绑定。
CallableStatement cs = pgConn.prepareCall(sqlScript);
cs.setString(1,"param1");
cs.setString(2,"value2");
cs.registerOutParameter(3, Types.VARCHAR);
cs.registerOutParameter(4, Types.VARCHAR);
我马上就知道了
cs.setString(1,"param1");
问题:org.postgresql.util.psqlexception:列索引超出范围:1,列数:0。
经过研究我发现,这个问题是因为cs.setstring找不到问号(或参数占位符)。另外,当我尝试下面的简单查询时,它也能工作。
CallableStatement cs = pgConn.prepareCall("call database_procedure(?,?,?,?)");
但是根据我当前的场景,我需要一个解决方案来执行我提到的整个脚本,而不是只执行一个调用,因为在不同的场景中,我们根据过程返回的数据为out参数赋值等等。请帮忙,这样,in/inout参数就会以某种方式传递给上面提到的sql脚本。
暂无答案!
目前还没有任何答案,快来回答吧!