Я разрабатываю некоторые хранимые процедуры в PL / pgSQL, и некоторые из них вызывают у меня некоторые проблемы. Спроки, которые я разрабатываю, получают по параметру массив, который я использую в цикле FOR для получения всех его элементов. Для определения верхней границы 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 при использовании пустого массива?
Примечание : я знаю, что всегда могу использовать условие перед циклом, например:
IF array_length(array,1) IS NOT NULL THEN
но проблема в том, что этот sproc должен обрабатывать тысячи вызовов в кратчайшие сроки. Как так, я не смотрю на то, что добавляет ненужные накладные расходы на обработку. Я просто смотрю, есть ли какой-нибудь способ «циклически» пустого массива в LOOP.