Iterating over integer[] in PL/pgSQL

前端 未结 1 1998
天涯浪人
天涯浪人 2020-12-05 04:06

I am trying to loop through an integer array (integer[]) in a plpgsql function. Something like this:

declare
    a integer[] = array[1,2,3];
            


        
相关标签:
1条回答
  • 2020-12-05 04:31
    DO
    $do$
    DECLARE
       a integer[] := array[1,2,3];
       i integer;                      -- int, not bigint!
    BEGIN
       FOR i IN 1 .. array_upper(a, 1)
       LOOP
          RAISE NOTICE '%', a[i];      -- single quotes!
       END LOOP;
    END
    $do$;
    

    Or simpler with FOREACH in PostgreSQL 9.1 or later:

       FOREACH i IN ARRAY a
       LOOP 
          RAISE NOTICE '%', i;
       END LOOP;
    

    For multi-dimensional arrays see:

    • Loop over array dimension in plpgsql

    However, set-based solutions with generate_series() or unnest() are often faster than looping for big sets. Basic examples:

    • PostgreSQL: Frequency Table Expansion
    • Select each month between a start and end date

    Search the tags generate-series or unnest for more.

    0 讨论(0)
提交回复
热议问题