使用java执行多行postgresql脚本,该脚本包含带有in/inout参数的存储过程调用

q5iwbnjs  于 2021-07-07  发布在  Java
关注(0)|答案(0)|浏览(172)

我有一个特例,需要从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脚本。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题