スポンサーサイト

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

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

PostgreSQLの関数定義では同じ名前でも引数の型や引数の数が違えば、定義することが可能です。

CREATE OR REPLACE FUNCTION sp_test(param1 int)
RETURNS VOID AS $FUNCTION$
BEGIN
END;
$FUNCTION$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION sp_test(param1 int, param2, text)
RETURNS VOID AS $FUNCTION$
BEGIN
END;
$FUNCTION$ LANGUAGE plpgsql;

そのため関数を削除する場合、名前と引数の型が一致していないと削除できません。

DROP FUNCTION sp_test(param1 int);
DROP FUNCTION sp_test(param1 int, param2, text);

関数を開発中の場合、引数が増えたり減ったりすることがよくあります。
そのたびに引数の型すべてを意識して削除するのは、面倒くさいです。

そこで独自に型を定義して、関数はその型を返すようにすることで
独自の型をCASCADE指定で削除すると関数も削除することができます。

DROP TYPE IF EXISTS type_sp_test CASCADE;
CREATE TYPE type_sp_test AS (
id BIGINT
);
CREATE OR REPLACE FUNCTION sp_test(param1 int, param2, text)
RETURNS SETOF type_sp_test AS $FUNCTION$
BEGIN
END;
$FUNCTION$ LANGUAGE plpgsql;

独自の型の削除、独自の型の定義、独自の型を仕様した関数の定義を連続して流すことで、引数が変わったとしても同じ名前の関数が増えたりしません。

スカラーの値を戻したい関数の場合は使えませんが
それ以外の目的で、例え戻り値が特に必要が無い場合でも、独自の型を定義するのがお勧めです。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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