На самом деле это даже проще, чем предложенный вами синтаксис
Настройка таблицы и данных
CREATE TABLE foo(
col1 NUMBER,
col2 VARCHAR2(100)
);
INSERT INTO foo( col1, col2 )
VALUES( 1, 'Justin' );
Блок PL / SQL для выбора, изменения и повторной вставки записи
declare
l_foo_rec foo%rowtype;
begin
select *
into l_foo_rec
from foo
where col1 = 1;
l_foo_rec.col2 := 'Michael';
l_foo_rec.col1 := l_foo_rec.col1 + 1;
insert into foo
values l_foo_rec;
end;
Который при запуске выдает эти данные в FOO
1* select * from foo
SQL> /
COL1 COL2
---------- --------------------
1 Justin
2 Michael
Конечно, как указывает Гленн, как правило, будет более эффективно написать SQL-оператор, который вставляет новую строку, выбирая данные из существующей строки без необходимости вообще использовать PL / SQL. Однако, в зависимости от сложности вашей логики, подход PL / SQL может быть легче отладить и поддерживать.