Как в запросе на изменение вернуть значение колонки до этого изменения?
Допустим, есть запись в таблице myTable:
id letter
1 a
Можно просто сделать следующее:
update myTable set
letter = 'b'
where id = 1
returning letter into myVariable;
и myVariable получт значение b.
Ищю как в returning получить значение колонки letter "перед тем, как". Чтобы предыдущий запрос на изнменение, например, выглядел бы как-то так:
update myTable set
letter = 'b'
where id = 1
returning letter "до изменения" into myVariable;
То есть, myVariable должна получить значение a.
В T-SQL можно достичь этого с помощью OUTPUT. Есть ли аналогичный способ в Oracle, чтобы не делать отдельный запрос только для того, чтобы получить предыдущее значение колонки?
Свободный перевод вопроса Oracle SQL - can I return the "before" state of a column value от участника @Pancho
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
update (
select T.*, (select letter from DUAL) old_letter
from myTable T
where id=1
) set letter = 'b'
returning old_letter into myVariable;
Работоспособность проверена на Oracle 11.2 (прим.ред.: проверено до 19.3 вкл.).