ORA-00928: отсутствует ключевое слово SELECT: обновить с помощью - PullRequest
1 голос
/ 26 марта 2019

Я получаю ORA-00928: отсутствует ошибка ключевого слова SELECT при использовании «update» с «with».

Это приводит к ошибке.

with wr_double as
(select...)

update work_request r 
set r.name = r.name || '_old'
where exists 
(select 1 from wr_double wd
where wd.name = r.name and wd.wr_id = r.id)

Но это работает нормально

with wr_double as
(select...)

select * from work_request r 
where exists 
(select 1 from wr_double wd
where wd.name = r.name and wd.wr_id = r.id)

Кроме того, если я помещаю свой подзапрос из с в теле обновления, он работает нормально.

update work_request r 
set r.name = r.name || '_old'
where exists 
(select 1 from 
(select 
wr.name, 
wr.id as wr_id, 
dup_wr.count,
d.id as d_id, 
d.create_date
from 
(select...) wd
where wd.name = r.name and wd.wr_id = r.id)

Могу ли я не использовать «с» таким образом с «обновлением»?

1 Ответ

5 голосов
/ 26 марта 2019

вы должны написать ниже, потому что CTE является частью SELECT, а не ОБНОВЛЕНИЕ

update work_request 
set name = name || '_old'

   where exists (
      with wr_double as
         (select...)
      select 1 from wr_double wd  wd.name = work_request.name and wd.wr_id = work_request.id
     );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...