Thread: Declaring empty, non-NULL array in plpgsql
Is there a way to declare an array in plpgsql so that it's empty (not NULL)? The following causes arr to end up being NULL: arr varchar[]; -- do stuff with arr.. arr = array_append(arr, '',''); And this causes an unwanted element at the front: arr varchar[] := array['''']; -- do stuff with arr.. arr = array_append(arr, '',''); __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
This avoids the NULL problem - is there a better way? aCats varchar[] = array['''']; vCats varchar; iIndex int := 1; rItem record; ... for rItem in select ... loop aCats[iIndex] := rItem.name; iIndex := iIndex + 1; end loop; vCats := array_to_string(aCats, '',''); ... --- CSN <cool_screen_name90001@yahoo.com> wrote: > Is there a way to declare an array in plpgsql so > that > it's empty (not NULL)? The following causes arr to > end > up being NULL: > > arr varchar[]; > -- do stuff with arr.. > arr = array_append(arr, '',''); > > > And this causes an unwanted element at the front: > > arr varchar[] := array['''']; > -- do stuff with arr.. > arr = array_append(arr, '',''); > > > __________________________________ > Do you Yahoo!? > Free Pop-Up Blocker - Get it now > http://companion.yahoo.com/ > __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
CSN wrote: > This avoids the NULL problem - is there a better way? > > aCats varchar[] = array['''']; aCats varchar[] = ''{}''; This gives you a truly empty array that can later become single or multidimensional. e.g. regression=# select '{}'::int[] || 1; ?column? ---------- {1} (1 row) regression=# select '{}'::int[] || array[1,2]; ?column? ---------- {1,2} (1 row) regression=# select '{}'::int[] || array[[1,2],[3,4]]; ?column? --------------- {{1,2},{3,4}} (1 row) HTH, Joe
CSN <cool_screen_name90001@yahoo.com> writes: > Is there a way to declare an array in plpgsql so that > it's empty (not NULL)? Sure. An empty-array literal is '{}', so: regression=# create function foo(int) returns varchar[] as ' regression'# declare regression'# arr varchar[] := ''{}''; regression'# begin regression'# for i in 1..$1 loop regression'# arr = array_append(arr, i::varchar); regression'# end loop; regression'# return arr; regression'# end' language plpgsql; CREATE FUNCTION regression=# select foo(10); foo ------------------------ {1,2,3,4,5,6,7,8,9,10} (1 row) regards, tom lane