postgresqlでplpgsql関数を使用してテーブルレコードセットを返す方法

1257 ワード

最近、1つのプロジェクトでpg(postgresql)が使われています.お客様は多くの表を必要としています.典型的な中国式のレポート(接触した人はみな非常に複雑であることを知っています)もあります.そのため、2つの方法で解決しました.1、パラメータでデータを制御する必要がなく、viewを使います.二、パラメータでデータを制御する必要があるfunction;第1類は比較的に簡単で、sqlさえあれば解決することができます;第2のクラスの中で、最も複雑なのはデータ処理を行うことであり、(例えば、ページごとに小計を加え、最後に合計する)、資料を調べてみると、8.3の中でこの問題を解決する2つの方法があり、以下にまとめる:一、return nextを使用する例は以下の通りである.
CREATE OR REPLACE FUNCTION fun1() RETURNS SETOF tbl AS

$

DECLARE

    r tbl%rowtype;

BEGIN

    FOR r IN SELECT * FROM tbl   

    LOOP

        --     

        RETURN NEXT r; --         

    END LOOP;

    RETURN;

END

$

LANGUAGE 'plpgsql' ;



SELECT * FROM fun1();
二、return query(8.3の新しい方法で、上記より性能が良いそうです)
CREATE OR REPLACE FUNCTION fun2() RETURNS SETOF tbl AS

$

BEGIN

    --    

    return query SELECT * FROM tbl;          

END

$

LANGUAGE 'plpgsql' ;

SELECT * FROM fun2();
「一図は千言に勝る」という人がいますが、個人的な習慣は、他の人が私に例をくれても、理論的な説教をたくさんしないほうがいいので、例だけをあげます.もしあなたがplpgsql関数を書くことができるならば、ただ--注釈の地方をあなたの必要な処理文に変えるだけでいいので、私はもうくどくどしません^^;分からなかったら、自分で関数の書き方を勉強するか、pgの関数の使い方をいつ書くか待って(必要があれば^^)ps:実際に上のコードを実行するためには、まず次のコードを実行する必要があります:create table tbl(col 1 int,col 2 text);INSERT INTO tbl VALUES (1,'AAA'); INSERT INTO tbl VALUES (2, 'BBB');