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

PostgreSQL 9.3 trigger funktion til at indsætte i tabel med parameteriseret navn

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Du kan ikke henvise til NEW inde i forespørgselsstrengen. NEW er synlig i funktionsteksten, men ikke inde i EXECUTE miljø. Den bedste løsning er at videregive værdierne i USING klausul.

Jeg erstattede også den tilsvarende to_char(NEW.updt_ts, '"log"WW') for tabelnavnet. to_char() er hurtigere og enklere her.




  1. MySQL - Brug af resultater fra én forespørgsel i en anden forespørgsel

  2. Hvordan forhindrer man dbms_output.put_line i at trimme indledende mellemrum?

  3. Hvordan indsætter man mange poster til MySQL hurtigere, Java?

  4. Forskellen mellem ON- og WHERE-udtryk i SQL-tabel joins