temp
- курсор . Вам нужно ссылаться на его атрибуты, в данном случае на псевдоним l
.
temp
, объявленный в разделе переменных, игнорируется, так как находится вне области видимости. То есть конструкция FOR ... L OOP определяет курсор, а код в l oop ссылается на курсор, а не на любую переменную, определенную вне курсора.
PROCEDURE updateAutomotiveDeliveryStatus(P_MOVEMENT_NUMBERS IN varchar)
is
BEGIN
FOR temp IN
(SELECT trim(regexp_substr(P_MOVEMENT_NUMBERS, '[^,]+', 1, LEVEL)) l
FROM dual
CONNECT BY LEVEL <= regexp_count(P_MOVEMENT_NUMBERS, ',')+1
)
LOOP
update hr.test1 te
set te.status = 'completed'
where status = temp.l ;
--dbms_output.put_line(MOVEMENT_NUM.*);
END LOOP;
END;
но что означает l
l
- псевдоним столбца. Мы не можем ссылаться на выражение типа trim(regexp_substr(P_MOVEMENT_NUMBERS, '[^,]+', 1, LEVEL))
, поэтому мы даем ему псевдоним, который мы можем использовать в SQL или PL / SQL. Обычно рекомендуется использовать значимое имя, например, movement_number
, чтобы сделать код более читабельным.