Skip to Main Content
 

  Oracle PL/SQL-Tipps

  Kurze Oracle PL/SQL Tipps der Muniqsoft Training Training GmbH

     Zu unseren Schulungen

Hier veröffentlichen wir regelmäßig kurze PL/SQL-Code-Snippets.


 Tipp: 113
  Bereich: TRIGGER
  Versionsinfo: 12.1, 12.2
  Erstelldatum: 10.12.2019
  Letzte Überarbeitung: 10.12.2019
Nicht nur Oracle besitzt DDL Trigger, diese gibt es auch in ähnlicher Form in der Postgres Datenbank

Folgende Events stehen derzeit zur Verfügung:
  • ddl_command_start (zündet vor Ausführung von ( CREATE, ALTER, DROP, SECURITY LABEL, COMMENT, GRANT oder REVOKE Befehlen)
  • ddl_command_end (zündet nach Ausführung von ( CREATE, ALTER, DROP, SECURITY LABEL, COMMENT, GRANT oder REVOKE Befehlen)
  • sql_drop (zündet bei allen Befehlen, die Objekte aus der Datenbank löschen)
  • table_rewrite (zündet vor rewrite Operationen wie ALTER TABLE oder ALTER TYPE)

Beispiel für einen ddl_command_end Trigger: CREATE FUNCTION notice_event() RETURNS event_trigger AS $$ DECLARE r RECORD; BEGIN FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP RAISE NOTICE 'caught % event on %', r.command_tag, r.object_identity; END LOOP; END; $$ LANGUAGE plpgsql; CREATE EVENT TRIGGER tr_notice_alter_table ON ddl_command_end WHEN TAG IN ('ALTER TABLE') EXECUTE PROCEDURE notice_event(); Beispiel für einen sql_drop Trigger in Postgres: CREATE EVENT TRIGGER tr_notice_drop_table ON SQL_DROP WHEN TAG IN ('DROP TABLE') EXECUTE PROCEDURE public.notice_drop_event(); CREATE OR REPLACE FUNCTION notice_drop_event() RETURNS event_trigger AS $$ DECLARE r RECORD; BEGIN FOR r IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP RAISE NOTICE 'Schema:% Objekt:% Typ:% Original:%', r.schema_name,r.object_name,r.object_type,r.original; END LOOP; END; $$ LANGUAGE plpgsql;   create table t (id int); drop table t; HINWEIS: Schema:public Objekt:t Typ:table Original:t HINWEIS: Schema:public Objekt:t Typ:type Original:f HINWEIS: Schema:public Objekt:_t Typ:type Original:f DROP TABLE
Mögliche Return-Spalten der Funktion pg_event_trigger_dropped_objects():
  • classid (oid)
  • objid (oid)
  • objsubid (oid)
  • original (boolean) War es das Originalziel des Drop
  • normal (boolean)
  • is_temporary (boolean) War es ein temporäres Objekt
  • object_type (text) Objekttyp wie z.B. Tabelle, Index, Schema
  • schema_name (text) Schemaname
  • object_name (text) Objektname
  • object_identity (text)
  • address_names (text[])
  • address_args (text[])

Event Matrix für Postgres 12
Weitere spannende Postgres Beispiele erfahren Sie in unseren PG/SQL Kurs.

Wussten Sie, dass die Muniqsoft Training seit Jahrzehnten Schulungen zu Oracle-Datenbanken und PL/SQL anbietet?
Erfahren Sie, was wir gerne auch für Ihre Firma tun können...