スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ストアードプロシージャのノウハウ。リターン編

PostgreSQLのストアードプロシージャではRETURNが3種類あります。
RETURN
RETURN QUERY
RETURN NEXT
です。3種類を使ったサンプルが以下です。

DROP TYPE IF EXISTS type_sp_test CASCADE;
CREATE TYPE type_sp_test AS (
id BIGINT
,name TEXT
);
CREATE OR REPLACE FUNCTION sp_test(p_param1 int, p_param2, text)
RETURNS SETOF type_sp_test AS $FUNCTION$
DECLARE
w_row type_sp_test;
BEGIN
RETURN QUERY SELECT
1::BIGINT
,'abc'
;
RETURN QUERY SELECT
2::BIGINT
,'efg'
;
w_row.id = 3;
w_row.name = 'hij';
RETURN NEXT w_row;
RETURN;
END;
$FUNCTION$ LANGUAGE plpgsql;


SELECT * FROM sp_test(1, 'a');

1, 'abc'
2, 'efg'
3, 'hij'

ストアードプロシージャ名を型に持つ関数です。
SETOFの指定があるので複数行返せます。
DECLAREとBEGINの間で定義しているのはローカル変数で、この関数が返す行を型にしています。

RETURN QUERYはSELECTやRUTURNINGを使ったINSERT、UPDATEの値を戻せます。
例では1行づつ2回呼んでますが、1回で複数行返すこともできます。
そして2回呼んでいることからわかると思いますが、RETURN QUERYは関数が終了しません。
関数の終了はRETURNが単独で呼ばれた時だけです。

RETURN NEXTは行を型にもつ変数を返す時に使用できます。
行の各列の値を、色々な方法でセットしてから返したい場合などに便利です。

RETURNは関数を終了させます。省略した場合、関数の最後に到達した時に関数が終了します。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。