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

動的クエリからテーブルに挿入する方法は?

    コマンドを動的に構築するための基本的なクエリ:

    SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
                , tbl_des, col_des, col_src, tbl_src) As sql
    FROM   table3;
    

    これにより、次のようなクエリが生成されます:

    INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
    

    引用符で囲まれた大文字のスペルに注意してください。引用符で囲まれていない識別子が自動的に小文字に折りたたまれるSQLコマンドとは異なり、テーブル内の文字列では大文字と小文字が区別されるようになりました。

    絶対にしないことをお勧めします 識別子を二重引用符で囲み、正当な小文字の名前のみを使用します。

    自動化するには:

    DO
    $$BEGIN
       EXECUTE (
          SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
                      , tbl_des, col_des, col_src, tbl_src) As sql
          FROM   table3
          -- WHERE table3_id = 123  -- select only *one* row!
          );
    END$$;
    

    必要 format() 関数。 マニュアルを読む

    これをplpgsql関数にラップして、追加のパラメータを渡すこともできます:




    1. SQLは、他の複数の変数を参照するステートメントの場合に基づいて、新しい変数で1,0を返します

    2. インデックスを作成するときに、mysqlデータベースの移行を伴うエンティティフレームワークが失敗する

    3. 見つからないDialectクラスを解決する方法:org.hibernate.dialect.MYSQLDialect例外?

    4. PHPデータベース駆動のマルチレベルメニュー