Я разрабатываю некоторые хранимые процедуры в PL/pgSQL, и некоторые из них дают мне некоторые проблемы. Продромы, которые я разрабатываю, получают по параметру массив, который я использую в FOR LOOP, чтобы получить все его элементы. Чтобы определить верхнюю границу FOR LOOP, я использую функцию array_length.
FOR i IN 1..array_length(array,1) LOOP
--array[i] something in here
END LOOP;
Проблемы возникают, когда я даю sprocs пустой массив. Вместо того, чтобы не вводить цикл, sproc просто возвращает ошибку, заявляя, что верхняя граница FOR LOOP равна NULL. Не должно быть 0?
Я делаю что-то не так с FOR LOOP?
Есть ли другой способ использовать те же границы в LOOP, не возвращая NULL при использовании пустого массива?
Примечание. Я знаю, что всегда могу использовать условие до LOOP, например:
IF array_length(array,1) IS NOT NULL THEN
но проблема заключается в следующем: этот sproc должен обрабатывать тысячи вызовов за короткий промежуток времени. Таким образом, я не ищу что-то, что добавляет ненужные накладные расходы на обработку. Я просто смотрю, есть ли способ "закодировать" пустой массив в LOOP.