嗨我有PostgreSQL一个匿名块,例如,DATA是java中的一个String变量(我的匿名块)
bounds
我正在执行上面的块
DO $$DECLARE new_issue text;
BEGIN
new_issue := ?;
UPDATE FORM9902 SET HAS_ISSUE = 'Y',ISSUE_DESC = ISSUE_DESC || new_issue
WHERE FORM990_ID = ?;
END $$;
但是如下所示抛出异常。
PreparedStatement preparedStatement = connection.prepareStatement(DATA);
preparedStatement.setString(1, "hai");
preparedStatement.setLong(2, new Long(0));
preparedStatement.executeUpdate();
任何人都可以帮助我,或者指出正确的资源,我可以纠正自己。
答案 0 :(得分:2)
PostgreSQL协议没有提供将参数绑定到非计划语句(或非查询参数点)的方法。这意味着您无法参数化此类语句。换句话说,你不能在这样的do块中绑定参数。
堆栈跟踪显示这是您的问题。您需要自己清理参数并进行字符串插值。
更好的方法是使用一个函数,您可以将它们作为参数传递。
答案 1 :(得分:0)
String updsql = " UPDATE FORM9902 SET HAS_ISSUE = 'Y', ISSUE_DESC = ISSUE_DESC || ? WHERE FORM990_ID = ? ";
PreparedStatement preparedStatement = connection.prepareStatement(updsql);
preparedStatement.setString(1, "hai");
preparedStatement.setLong(2, 0L);
preparedStatement.executeUpdate();