PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Migracja wyzwalacza z Oracle 11g do Postgresql 8.4

Wyzwalacze w Postgresie nie dostarczają bezpośrednio kodu wyzwalacza, ale wywołują funkcję wyzwalacza , które można wywołać z dowolnej liczby wyzwalaczy, chociaż często są one dostosowane do jednego konkretnego zdarzenia w jednej konkretnej tabeli.

Funkcja wyzwalania:

CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
  RETURNS trigger AS
$func$
BEGIN

INSERT INTO some_tbl(key, name, describe)   -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);

RETURN OLD;

END
$func$ LANGUAGE plpgsql 

Wyzwalacz:

CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
  • Zrób to AFTER wyzwalacz w celu uproszczenia. A BEFORE wyzwalacz musiałby RETURN NEW aby aktualizacje działały, ale NEW nie jest widoczny w DELETE cyngiel. Więc potrzebujesz IF TG_OP = ... itp.

  • Zawsze dostarczaj listę docelową dla utrwalonego INSERT sprawozdania. To jest tak samo złe w wyzwalaczu Oracle.

  • Prawdopodobnie masz tabelę z serial kolumna. Tylko nie wspominaj o tym we wstawce, następny identyfikator z sekwencji jest wstawiany automatycznie.

Istnieje wiele przykładów kodu tutaj na SO.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wdrożyć wysoce dostępny PostgreSQL z pojedynczym punktem końcowym dla WordPress

  2. Postgres - Jak przekonwertować wiersz z zakresem int na wiersze pośrednie z poszczególnych wartości z tego zakresu?

  3. Potrzebujesz pomocy z wyzwalaczem i funkcją Postgres

  4. Kontener Dockera zamyka się, podając błąd „katalog danych ma niewłaściwą własność” podczas wykonywania w systemie Windows 10

  5. Jak wyświetlić aktywny kursor będący podstawą zapytania