行が存在するかどうかを確認し、それに応じて行動する必要があるpostgresでストアドプロシージャを作成しています。線に沿った何か。
IF SELECT * FROM foo WHERE x = 'abc' AND y = 'xyz' THEN
-- do something here
ELSE
-- do something else
END;
少しグーグルで検索しましたが、良いヒットがありませんでした。
行が存在するかどうかを確認し、それに応じて行動する必要があるpostgresでストアドプロシージャを作成しています。線に沿った何か。
IF SELECT * FROM foo WHERE x = 'abc' AND y = 'xyz' THEN
-- do something here
ELSE
-- do something else
END;
少しグーグルで検索しましたが、良いヒットがありませんでした。
PERFORM
とFOUND
自動変数を使用します:
PERFORM * FROM foo WHERE x = 'abc' AND y = 'xyz';
IF FOUND THEN
....
END IF;
1つ以上の行が返された場合、これは成功します。結果を正確に 1 行に制限する場合は、行数を取得するために使用GET DIAGNOSTICS
するか、行の をd 変数SELECT INTO
に格納してからテストします。結果が得られないことがエラーである場合は、 を使用して、正確に 1 行を取得し、ターゲット変数に格納する必要があります。count(...)
DECLARE
SELECT INTO STRICT
このようなことを行うときは、並行性の問題に注意してください。upsert/merge 関数を作成しようとしている場合、このアプローチは機能しません。「アップサートが複雑な理由」を参照してください。