Выполнение запроса на обновление Oracle в цикле - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть таблица с большим количеством строк.Мне нужно обновить определенный столбец во всех строках таблицы, используя другой (очень сложный) запрос.

Это моя таблица:

   col1    col2
    A        null 
    B        null 
    C        null

У меня есть запрос на обновление каждой строки отдельно, это выглядит так:

update table1 set col2='
... some query that uses other tables and the A value ...' 
where col1='A'

Я хочу обновить все строки в одном запросе (в противном случае мне придется выполнить запрос для каждой строки и изменить переменные).

Iнужно, чтобы значение из col1 было доступно для использования во внутреннем запросе, который я запускаю.Как я могу это сделать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Нет необходимости в петле.Вы можете использовать коррелированный подзапрос:

UPDATE table1
SET col2 = (SELECT colX FROM tableA WHERE table1.some_col = tableA.some_col)
WHERE col1='A';
-- subquery has to return single value(1 row and 1 column)

Использование подзапросов

Oracle выполняет коррелированный подзапрос, когда вложенный подзапрос ссылается на столбец из таблицы, ссылающейся народительское утверждение на один уровень выше подзапроса.Родительский оператор может быть оператором SELECT, UPDATE или DELETE, в который вложен подзапрос.Коррелированный подзапрос концептуально оценивается один раз для каждой строки, обработанной родительским оператором.

0 голосов
/ 21 февраля 2019

Похоже, вы хотите коррелированный подзапрос:

update table1 t1
    set col2 = (select . . .
                from . .  .
                where . . .
                      ? = t1.col1  -- your condition goes here
                . . .
               );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...