#sql #oracle #plsql
Вопрос:
DECLARE
TYPE visit AS RECORD
(
DATA_1 VARCHAR2;
)
TYPE lstVisit IS TABLE OF visit;
BEGIN
FOR I IN LISTA.FIRST..LISTA.LAST LOOP
FOR J IN LISTB.FIRST..LISTB.LAST LOOP
lstfetchdata:=function_fetchdata(LISTA);
END LOOP;
lstVisit:= lstfetchdata;
END LOOP;
Теперь проблема, с которой я сталкиваюсь, заключается в том, как сохранить все элементы в lstVisit.
Предположим, функция fetchdata() возвращает 3 строки, а в последующем вызове возвращает 2 и так далее.
Как я должен индексировать lstVisit, чтобы хранить все значения одно за другим
Комментарии:
1. Ваш псевдокод немного неясен; что такое LISTA и LISTB, и что LISTB добавляет в пример — или функция должна принимать текущий элемент обоих из них, а не весь СПИСОК? Как определяются переменные
lstVisit
иlstfetchdata
, имеют ли они обаlstVisit
типа (что в лучшем случае приводит к путанице в именовании)?2. @Alexpool СПИСОК и СПИСОК B-это два похожих типа записей списка
Ответ №1:
Для каждой записи, возвращаемой вызовом функции, вы можете расширить свою окончательную lstVisit
коллекцию и назначить извлеченную запись в эту позицию; что-то вроде:
-- initialise the final collection
lstVisit := new tabVisit();
-- loop over both existing collections
for i in lista.first..lista.last loop
for j in listb.first..listb.last loop
-- get a subset of values
lstfetchdata:=function_fetchdata(lista(i), listb(j));
-- loop around that subset
for k in 1..lstfetchdata.count loop
-- extend the final collection and add the subset value
lstVisit.extend();
lstVisit(lstVisit.count) := lstfetchdata(k);
end loop;
end loop;
end loop;
db<>fiddle<> с некоторыми изменениями имени и функцией создания случайных строк на основе значений lista/b, но это должно дать вам представление.