postgresのストアド完全初心者なのですが、本日読む機会がありまして。
SELECT INTO
問題の部分
SELECT INTO alphaIds, betaIds array_agg(alphaId), array_agg(betaId) FROM TBL;
このSELECT INTO
というものがよくわからず困っていました。
調べてみてもSELECT (*|columns...) INTO val1, val2 FROM TBL;
のようなものは見かけたのですが、ちょっと違う。と詳しく読むと、INTOの位置はSELECTの直後でもよいとのこと。
タプルのようなものと理解しました。
(alphaIds, betaIds) <- (array_agg(alphaId), array_agg(betaId))
INTO
の位置を書き換えると以下のような感じ(この方が分かりやすいと思う)。
SELECT array_agg(alphaId), array_agg(betaId) INTO alphaIds, betaIds FROM TBL;
なお、PL/pgSQL以外でのSELECT INTO
はSELECT結果をもとにしてテーブルを作る構文だそうです。
array_agg(xxx)
集約関数で、複数行の結果を配列にしてくれるもの。
SQLServerなどで同じことをするのは結構大変だった記憶があり、こういった便利な関数があるのはいいですね。
$$
単なる区切り文字。
シングルクォートを使うと、内部でエスケープしなければいけないので$$
を使うのが一般的、らしい。
array_length(arr, 1)
の第二引数
配列のどの次元の長さを出すか。