行が存在しない場合に行を挿入し、行の ID (新規作成または既存) を返す関数を postgres で作成しようとしています。
私はこれを思いつきました:
CREATE OR REPLACE FUNCTION
get_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL STABLE AS $$
SELECT typeid FROM enttypes WHERE name = $1 AND module = $2
$$;
CREATE OR REPLACE FUNCTION
ensure_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL AS $$
SELECT CASE WHEN get_enttype($1, $2) IS NULL
THEN
INSERT INTO enttypes(name, module) VALUES ($1, $2) RETURNING typeid
ELSE
get_enttype($1, $2)
END
$$;
INSERT
ただし、 insideのために構文エラーが発生しますCASE
。INSERT
これで別の関数を作成し、この関数を で使用することで、この問題を解決できましたCASE
。期待どおりに動作しますが、この修正は少し奇妙に思えます。私の質問は - 別の関数を作成せずにこれを修正できますか?