PLSQL-запрос для поиска по типу таблицы
Я объявил следующие типы в пакете.
TYPE l_task_type_rec is record (task_id number, creation_date date);
TYPE tas_tab is table of l_task_type_rec;
l_task_rec tas_tab;
Я пытаюсь использовать цикл for для итерации по объектам в таблицах типа объектов, как это. Я не уверен, если это возможно.
for counter in l_task_rec.first ..l_task_rec.last
loop
select task_id into l_task_id from l_task_rec where rowid = counter;
select location_id into p_location_id from csf_ct_tasks where task_id = l_task_id;
OPEN c_location_rec (p_location_id);
FETCH c_location_rec
BULK COLLECT INTO x_location_rec;
CLOSE c_location_rec;
end loop;
Я хочу вызвать курсор из цикла for, чтобы я мог получить список всех местоположений один за другим, получить и сохранить все данные в виде записи. Я знаю, что запрос для поиска по типу таблицы неправильный, потому что он говорит, что таблица или представление l_task_rec не существует! Может кто-нибудь сказать мне, что я делаю не так, или указать мне правильное направление? Заранее спасибо..
1 ответ
Решение
Вот пример того, как вы можете перебирать объекты в табличном типе:
declare
l_task_rec tas_tab;
p_location_id number;//Assuming number
begin
--Example data
l_task_rec:=tas_tab( l_task_type_rec (10, sysdate), l_task_type_rec (21, sysdate), l_task_type_rec (35, sysdate));--This should come from somewhere else
for counter in l_task_rec.first .. l_task_rec.last
loop
--You can get the data like this
DBMS_OUTPUT.PUT_LINE('TASK_ID: '||l_task_rec(counter).TASK_ID);
DBMS_OUTPUT.PUT_LINE('CREATION_DATE: '||l_task_rec(counter).CREATION_DATE);
select location_id into p_location_id from csf_ct_tasks where task_id = l_task_rec(counter).TASK_ID;
--More code
--OPEN ...
--CLOSE ...
end loop;
end;
Для того, чтобы это работало, я изменил как l_task_type_rec
тип создан:
create TYPE l_task_type_rec is object (task_id number, creation_date date)