あなたはできません DECLARE
(グローバル)変数( 回避策
)プレーンSQLでループすることもありません-@bmaが提供する再帰CTE
を除く (これは実際には繰り返し 厳密に言えば、ループではなく、行を超えます。
ただし 、 DO
があります ステートメント
そのようなアドホックな手続き型コードの場合。 Postgres9.0で導入されました。これは1回限りの関数のように機能しますが、パラメーターを受け取らず、何も返しません。 RAISE
通知などなので、あなたの例はうまくいくでしょう:
DO
$do$
DECLARE
_counter int := 0;
BEGIN
WHILE _counter < 10
LOOP
_counter := _counter + 1;
RAISE NOTICE 'The counter is %', _counter; -- coerced to text automatically
END LOOP;
END
$do$
特に指定がない限り、本文の言語はデフォルトでplpgsql
になります。 。 登録されている手続き型言語
を使用できます。 ただし、宣言した場合(LANGUAGE plpython
など) 。
Postgresは、 generate_series()
も提供しています。
セットをアドホックに生成します。これにより、多くの場合、ループの必要がなくなります。 例については、SOで検索してみてください。
また、WHERE
を使用することもできます data-modifyingCTE
の句 プレーンSQLでケースをフォークし、IF .. THEN .. ELSE .. END
をエミュレートします ...