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