array_length () пустого массива, возвращающего NULL

Я разрабатываю некоторые хранимые процедуры в 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.

21
задан Erwin Brandstetter 5 October 2011 в 22:34
поделиться