sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLは関数の外部をループします。それは可能ですか?

    あなたはできません 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をエミュレートします ...



    1. ビルド時に入力されたMySQLDockerイメージを作成する方法

    2. サブクエリが2つの値を返すことは可能ですか?

    3. JPAを介して行をランダムに選択

    4. 同等のMysql戻り句