Мне нужно обновить несколько записей в таблице, сопоставляя определенный столбец (в данном случае dest_file_path). Я присоединяюсь к столу с собой. Внутренний выбор, чтобы объединить соответствующий столбец с одной и той же таблицей, чтобы получить все записи с одним соответствующим столбцом
update job_queue
set status = 'RUNNING', last_updated_time = systimestamp
where rowid in
(
select jq.rowid from job_queue jq,
(select DEST_FILE_PATH from JOB_QUEUE
where status not in ('RUNNING','FINISHED','SKIPPED') and operation_type in ('copy')
order by case when status='FAILED' then 0 else 1 end desc, dest_file_path fetch first 1 rows only) dest
where jq.dest_file_path = dest.dest_file_path and jq.operation_type='copy'
)
for update skip locked;
К сожалению, я получаю эту ошибку:
Error at Command Line : 25 Column : 1
Error report -
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Хотя, если Я делаю простой выбор вместо обновления, он работает просто отлично. Вот запрос на выбор.
select rowid,dest_file_path from job_queue
where rowid in
(
select jq.rowid from job_queue jq,
(select DEST_FILE_PATH from JOB_QUEUE
where dest_file_path='/file/path'
and status not in ('RUNNING','FINISHED','SKIPPED') and operation_type in ('copy')
order by case when status='FAILED' then 0 else 1 end desc, dest_file_path fetch first 1 rows only) dest
where jq.dest_file_path = dest.dest_file_path and jq.operation_type='copy'
)
for update skip locked;
Любые предложения о том, как заняться обновлением.