スポンサーサイト

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

ストアードプロシージャのノウハウ。引数編

PostgreSQLのユーザ関数の引数はデフォルト値が指定できて省略が可能です。

CREATE OR REPLACE FUNCTION sp_test(p_param1 INT, DEFAULT 0 p_param2 text DEFAULT '')
RETURNS VOID AS $FUNCTION$
BEGIN
END;
$FUNCTION$ LANGUAGE plpgsql;

以下のように使います。

SELECT sp_test(1, 'abc');
SELECT sp_test(p_params1 := 2);
SELECT sp_test(p_params2 := 'efg');

この機能は色々な条件で検索する画面などで便利に使えます。
画面でいくつかの値を指定して検索を実行するときに、
指定された値と関数の引数がマッチさせることでMVCがスムーズに実装できます。

Railsでの実装例です。Modelクラスのクラスメソッドとして実装します。

def self.find_for_sp(name, db_params)
bind_params = db_params.map{|k, v| "p_#{k} := :#{k}" }
sql = " SELECT * FROM #{name} (#{bind_params.join(",")}) "
find_by_sql([sql, db_params])
end

以下のように実行します。
Model.find_for_sp("sp_test", {params1: 1, params2: "abc"});
# SELECT * FROM sp_test(p_params1 := 1, p_params2 := 'abc');
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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