官方文件:陣列 http://www.postgresql.org/docs/9.5/static/functions-array.html


建立 run () 涵式:

整數陣列:

CREATE OR REPLACE FUNCTION run(data int[]) RETURNS SETOF int AS
    $BODY$
        DECLARE i int;
    BEGIN
        FOR i IN 1 .. array_upper(data, 1) LOOP
            RETURN NEXT i;
        END LOOP;
    END
    $BODY$
LANGUAGE 'plpgsql';

查詢:

SELECT run('{1,2,3}');

輸出結果:

 run

-----
  1
  2
  3


文字陣列 1 (使用 Foreach):

CREATE OR REPLACE FUNCTION run(datas text[]) RETURNS SETOF text AS
    $BODY$
        DECLARE data TEXT;
    BEGIN
        FOREACH data IN ARRAY datas LOOP
            RETURN NEXT data;
        END LOOP;
    END
    $BODY$
LANGUAGE 'plpgsql';

查詢:
SELECT run('{AAA, BBB, CCC}');
run
-----
AAA
BBB
CCC


文字陣列 2 (使用 For):

CREATE OR REPLACE FUNCTION run(datas text[]) RETURNS SETOF text AS
    $BODY$
        DECLARE data TEXT;
    BEGIN
        FOR i IN 1..array_length(datas, 1) LOOP
            data := datas[i];
            RETURN NEXT data;
        END LOOP;
    END
$BODY$
LANGUAGE 'plpgsql';

查詢:
SELECT run('{AAA, BBB, CCC}');
run
-----
AAA
BBB
CCC

文字陣列 2 (空值不報錯):

CREATE OR REPLACE FUNCTION run(datas text[]) RETURNS SETOF text AS
$BODY$
BEGIN
FOR i IN 1..coalesce(array_length(datas, 1), 0) LOOP
RETURN NEXT datas[i];
END LOOP;
END
$BODY$
LANGUAGE 'plpgsql';

執行:
    SELECT run('{}');    // 不會抱錯
    SELECT run('{AAA,BBB}');








創作者介紹
創作者 黃彥霖 的頭像
黃彥霖

彥霖 實驗筆記

黃彥霖 發表在 痞客邦 留言(0) 人氣()