Предположим, что вы опускаете пункт for each row
. Чем вы можете добиться триггера оператора, который срабатывает только после совершения одной транзакции. Программное обеспечение может быть примерно таким:
create or replace trigger ai_test
after insert on orders
declare
my_test_row orders%rowtype;
begin
select o.*
into my_test_row
from orders o
where o.order_date = (select max(order_date) -- must be the identifying attribute
from orders);
insert into orders_his (id, cust_id, prod_id, order_date)
values
(my_test_row.id
, my_test_row.cust_id
, my_test_row.prod_id
, my_test_row.order_date);
end;
Что вы имеете в виду только самое последнее - новое состояние всех обновленных строк? Что вы пробовали и что не работает, как вы этого хотите? –
Предположим, что массовое обновление было выполнено, обновив запись, как в 10 раз. Если я запрограммирую триггер с «FOR EACH ROW», тогда для каждого обновления будут созданы 10 новых записей для того же ID. Я не хочу этого, я хочу знать, есть ли способ, по которому я могу получить только последнюю запись (в данном случае 10-я запись), которая будет иметь все обновленные значения для ранее обновленных 9 записей. –
До сих пор я создал временную таблицу, в которую вставляются все обновленные записи. Впоследствии я нахожу дубликаты с использованием идентификаторов в этой таблице, упорядочиваю по записям в соответствии с их датой создания (по убыванию), а затем обновляю таблицу истории. Еще более надежный вариант я Ниже с помощью запроса SELECT * FROM (SELECT е. *, ROW_NUMBER() OVER (раздел по заказу root_id по history_creation_dte DESC) r--, статус ASC) г ОТ APP_TRANSACTION_R_TEMP е ) WHERE r = 1; –