我正在使用 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();
Gives me the following error:
我尝试过的
- running
call reduceStock(1,1);
来自 psql 客户端 - 完美运行
- 删除数据库并重新开始查看是否缓存了某些旧定义 - 不起作用
- 不同大小写、不同间距
call
任何想法,将不胜感激
您需要删除花括号,它是调用过程的 JDBC 转义。但因为 Postgres 有它自己的call
命令,它们不是必需的(并且与 JDBC 转义冲突)。
CallableStatement stmt = conn.prepareCall("call reducestock(?, ?)");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)