Вы пытаетесь обновить только что созданный столбец значением, рассчитанным из другого столбца.Обычно это делается с помощью простого обновления:
update schematics
set type_id =
substr(key,
instr(key, '|') + 1,
instr(key, '|', 1, 2) - instr(key, '|', 1, 1) - 1);
Если вы хотите сделать то же самое в PL / SQL с циклом для каждой отдельной записи, вы должны выбрать ключ и вычисленное значение, чтобы использовать обадля обновления.Но это похоже на излишество.
begin
for rec in
(
select distinct
key,
substr(key,
instr(key, '|') + 1,
instr(key, '|', 1, 2) - instr(key, '|', 1, 1) - 1) as type_id
from schematics
) loop
update schematics
set type_id = rec.type_id
where key = rec.key;
end loop;
end;