関数には複数の OUT パラメータがあり、そのすべてが必要なため、選択行ごとに関数を数回呼び出す必要があります。
例えば
SELECT
a, b,
(SELECT out1 from func(a)),
(SELECT out2 from func(a))
FROM
table1
この関数を一度だけ呼び出すには、横結合を使用します
SELECT
a, b,
lat.out1,
lat.out2
LEFT OUTER JOIN LATERAL (
SELECT out1, out2 FROM func(a)
) lat ON (TRUE)
問題はa
nullable の場合です。func
null で呼び出されると例外をスローします。次に、結合なしで私はこのようにします
SELECT
a, b,
CASE WHEN a IS NOT NULL
THEN out1 from func(a)
END,
CASE WHEN a IS NOT NULL
THEN out2 from func(a)
END
FROM
table1
しかし、どうすればそれを実装できlateral joins
ますか? ラテラルジョイン内で CASE を使用する方法はありますか? または、プロシージャを一度だけ呼び出す他の方法はありますか?