sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL 9.3 triggerfunktion för att infoga i tabell med parametrerat namn

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 inte referera till NEW inuti frågesträngen. NEW är synlig i funktionskroppen, men inte inuti EXECUTE miljö. Den bästa lösningen är att skicka värdena i USING klausul.

Jag ersatte också motsvarande to_char(NEW.updt_ts, '"log"WW') för tabellnamnet. to_char() är snabbare och enklare här.




  1. Hur man bara väljer fältnamn när man använder visa kolumner fråga i mysql

  2. PostgreSQL låsläge

  3. MySQL-procedur inom en Select?

  4. Hur ändrar man ANVÄNDARNAMN och LÖSENORD för MySQL?