Как в запросе на изменение вернуть значение колонки до этого изменения?

Допустим, есть запись в таблице 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 вкл.).


Свободный перевод ответа от участника @Mike

→ Ссылка