postgresql - PostgreSQL {call Update Set ...} 得到“SET 处或附近的语法错误”
问题描述
我正在将查询从 Oracle 数据库更改为 PostgreSQL,在此查询中我收到此错误:
ERROR: syntax error at or near "SET"
查询是:
{call UPDATE alarm_instance SET last_update_time=default, wait_expire_time=null, core_number=nextval(SEQ_ALRM_NUMBR)
where wait_time <= current_date RETURNING alarm_instance_id bulk collect INTO ?}
我正在使用 JDBC 连接到数据库,这是调用代码
try (CallableStatement cs = super.prepareCall_(query)) {
cs.registerOutParameter(1, Types.ARRAY);
cs.execute();
...
我仔细查看了 Postgres 文档,找不到问题所在,也没有找到针对这种特定情况的任何答案
解决方案
UPDATE
不能使用 CallableStatement 执行语句。CallableStatement 本质上只是用于调用存储过程。如果 Oracle 包含匿名 PL/SQL 块。
并且bulk collect
一开始在 Postgres 中是无效的。
看来你想要这样的东西:
String sql =
"UPDATE alarm_instance " +
" SET last_update_time=default, " +
" wait_expire_time=null, "
" core_number=nextval('SEQ_ALRM_NUMBR') " +
" where wait_time <= current_date RETURNING alarm_instance_id";
Statement stmt = connection.createStatement();
stmt.execute(sql);
int rowsUpdated = stmt.getUpdateCount();
ResultSet rs = stmt.getResultSet();
while (rs.next() {
// do something with the returned IDs
}
推荐阅读
- javascript - 如何使用 vuejs 将数据发送到 api
- javascript - 每当单击粘滞按钮时,在可见屏幕/网页上的当前位置上打开的菜单
- tsql - 试图理解 HMAC SHA256
- flutter - 侧边栏不使用 onTap() 更改屏幕
- docker - 在哪里可以找到默认的 docker ulimit 设置?
- html - 滚动时背景为白色
- python - 删除存储为列表的 Pandas DF
- python - Sklearn ROC AUC 分数:ValueError:y 应该是一维数组,得到一个形状为 (15, 2) 的数组
- javascript - 输入时标题中的顶部导航项不断闪烁
- javascript - Javascript 到 JSON 拼接位置