sql >> Database >  >> RDS >> PostgreSQL

Hoe INSERT INTO tabel van dynamische query?

De basisquery om het commando dynamisch op te bouwen:

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

Dit levert een zoekopdracht op als:

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

Let op de geciteerde spelling in hoofdletters. In tegenstelling tot SQL-opdrachten, waar ID's zonder aanhalingstekens automatisch naar kleine letters worden gevouwen, zijn de tekenreeksen in uw tabel nu hoofdlettergevoelig!

Ik stel voor dat je nooit dubbele aanhalingstekens en gebruik uitsluitend legale namen in kleine letters.

Om te automatiseren:

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$$;

Je nodig om de format() functie. Lees de handleiding .

Je kunt dit ook in een plpgsql-functie inpakken en extra parameters doorgeven:




  1. Hoe kan ik waarde toewijzen aan een variabele met behulp van de aggregatiefunctie in mysql?

  2. Fatale fout:niet-gevangen fout:oproep naar niet-gedefinieerde functie mysql_pconnect()

  3. ORA-12170:TNS:Time-out verbinding opgetreden

  4. Mysql regex-fout #1139 met letterlijke -