Это один из самых уродливых кодов, которые я недавно видел.Пожалуйста, ради себя (как и для нас), узнайте, как правильно форматировать и вставлять код, чтобы его было легче читать и выполнять.
Более того, он недопустим - отсутствует в DECLARE
, нетEND
, вы объявили некоторые переменные (a_basket_id
, a_order_id
), но использовали другие (a_basketid
, a_ordertype
) ... довольно беспорядок.
По вашему вопросу: насколькокак я понял, все можно сделать одним оператором UPDATE
, PL / SQL не требуется:
update table1 set
basket_id = cut(function1(or_id), 1, '@'),
order_id = cut(function1(or_id), 2, '@');
Если вы настаиваете на PL / SQL, посмотрите на это: IИспользуется курсорный цикл FOR, поскольку его проще поддерживать, чем явный курсор (поскольку вам не нужно создавать переменные курсора (ов), открывать курсор, беспокоиться о выходе из цикла, закрывать курсор - Oracle сделает это за вас),Хотя вам вообще не нужны локальные переменные (ни PL / SQL, как я уже говорил), я позволю им быть.
declare
a_basket_id table1.basket_id%type;
a_order_id table1.order_id%type;
begin
for cur_r in (select or_id from table1) loop
a_basket_id := cut(function1(cur_r.or_id), 1, '@');
a_order_id := cut(function1(cur_r.or_id), 2, '@');
update table1 set
basket_id = a_basket_id
order_id = a_order_id
where or_id = cur_r.or_id;
end loop;
end;