PostgreSQL {call Update Set ...} получает «синтаксическую ошибку в или около SET» - PullRequest
0 голосов
/ 12 октября 2018

Я меняю запросы из базы данных 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 и не могу найти, что не так, и не нашел ответа на эту конкретную ситуацию

1 Ответ

0 голосов
/ 12 октября 2018

Оператор 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...