“x是一个过程,当我已经在使用call时使用”call“

y53ybaqx  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(291)

我正在使用postgres 12并编写了以下程序:

CREATE OR REPLACE PROCEDURE reduceStock(id INTEGER, soldQuantity INTEGER)
    LANGUAGE plpgsql AS
    $$
    BEGIN
    UPDATE inventory SET ProductStockAmount = ProductStockAmount - soldQuantity WHERE ProductID = id;     
    END;
    $$;

如果我在命令行上打开psql并运行 call reduceStock(1,1); 但是,从我的java程序调用它如下:

CallableStatement stmt = conn.prepareCall("{call reduceStock(?, ?)}");
stmt.setInt(1, productID);
stmt.setInt(2, quantity);
stmt.execute();

显示以下错误:

我试过的

跑步 call reduceStock(1,1); 从psql客户端-完美地工作
删除数据库并重新开始查看是否缓存了某个旧定义-不起作用
不同的资本,不同的间隔 call 如有任何意见,我们将不胜感激

w1jd8yoj

w1jd8yoj1#

您需要删除花括号,这是用于调用过程的jdbc转义。但因为postgres有自己的 call 命令,则不需要它们(并与jdbc转义冲突)。

CallableStatement stmt = conn.prepareCall("call reducestock(?, ?)");

相关问题