sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan INSERT INTO Tabel fra dynamisk forespørgsel?

Den grundlæggende forespørgsel til at bygge kommandoen dynamisk:

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

Dette producerer en forespørgsel som:

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

Bemærk den citerede stavemåde med store bogstaver. I modsætning til i SQL-kommandoer, hvor identifikatorer uden anførselstegn automatisk foldes til små bogstaver, er strengene i din tabel nu store og små bogstaver!

Jeg foreslår, at du aldrig identifikatorer med dobbelte anførselstegn, og brug udelukkende lovlige navne med små bogstaver.

For at automatisere:

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

Du bruger at forstå format() fungere. Læs manualen .

Du kan også pakke dette ind i en plpgsql-funktion og sende yderligere parametre:




  1. VB.net SQL-sætning til forespørgsel efter 1 år gammelt tidsstempel

  2. Kombiner felter fra forskellige rækker på betingelse

  3. Transaktionsloggen for databasen 'databasenavn' er fuld.

  4. SQL Pivot med flere kolonner