A common table expression that uses one ore more DML statements
with old_orders as ( delete from orders where order_date <= current_date - interval '2' year returning * ) insert into archived_orders select * from old_orders;
Some DBMS also allow to update the result of a CTE:
with sorted as (
select pk,
sort_order,
row_number over (order by sort_order) as rn
from some_table
)
update sorted
set sort_order = rn;