22

この命令は機能します:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination)
FROM road 
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

しかし、私はこのように何かを使いたいです:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination), lengths array_agg(length)
FROM road
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

SELECT INTO複数の変数を設定するために1 つの命令のみを使用する方法は?

4

2 に答える 2

40

PL/pgSQLではSELECT INTO 、一度に好きなだけ変数を直接指定できます。構文が逆になっただけです:

SELECT INTO unsolvedNodes, lengths 
       array_agg(DISTINCT idDestination), array_agg(length)
FROM   road
WHERE  idOrigin = ANY(solvedNodes)
AND    NOT (idDestination = ANY(solvedNodes));

キーワードのINTO後に​​ターゲット変数のリストがあり、対応するSELECTリストがあります。INTO句のターゲットは次のとおりです(ここでマニュアルを引用):

...レコード変数、行変数、または単純な変数とレコード/行フィールドのコンマ区切りリスト。

また:

このINTO句は、SQL コマンドのほぼどこにでも表示できます。通常、コマンド内の select_expressions のリストの直前または直後SELECT、または他のコマンド タイプの場合はコマンドの最後に記述されます。PL/pgSQL パーサーが将来のバージョンでより厳密になる場合に備えて、この規則に従うことをお勧めします。

これは、Postgres の SQL ダイアレクトと混同しないでください。これはもう使用しないでください。これは標準 SQL に反するものであり、おそらく最終的には削除されるでしょう。マニュアルは、その継続的な使用を積極的に思いとどまらせています。SELECT INTO

CREATE TABLE ASこの目的には、新しいコードで使用するのが最適です。

于 2013-05-01T02:23:31.657 に答える