Hallo,
das mit der Variablen hab ich mir auch gedacht, sie ist in einem Package deklariert, hab es auch versucht, den Package-Namen davor zu schreiben, bekomme dann aber auch eine Fehlermeldung. Schreibe ich die Prozedur ins gleiche Package, funktioniert es auch nicht.
'Funktioniert nicht' ist keine Fehlerbeschreibung.
Welche Fehlermeldungen genau bekommst Du bei der Verwendung von welchem Code?
Wieso hälst du die Verwendung von globalen Variablen in Triggern nicht für sinnvoll? Würde mich interessieren.
Ich halte Trigger an sich für problematisch, das dadurch die Programmierlogik verteilt implementiert ist und nicht an einer einzigen Stelle.
Datenbanksysteme wie Oracle haben für mich den Vorteil mittels Stored procedures bzw. Packages relativ einfach auch komplexere Logik direkt in der Datenbank zu implementieren. Und der programmiertechnische Aufwand in einer Datenbank-Client-Anwendung DML-Statements (die dann irgendwelche Trigger auslösen) oder alternativ einen Prozedur-Aufruf zu implementieren ist imho annähernd der gleiche.
Allerdings habe ich bei Prozeduren den Vorteil zusätzliche Datenmanipulationen oder -prüfungen einzubauen (und das eventuell auch nachträglich), die keinerlei Änderungsaufwand in der Client[1]-Anwendung erforderlich machen.
Ausserdem können, wie in Deinem Falle, auch ungewollte Seiteneffekte auftreten, wie z.B. dass der von Dir hier angesprochene zweite Trigger, der die globale Variable braucht, auch ausgelöst wird, ohne dass eine andere Datenbank-seitige Logik die Variable vorher korrekt befüllt (z.B. der von Dir angesprochene erste Trigger). Es wird also relativ schnell komplex und der Code der notwendig wird um allfälliges Fehlverhalten zu verhindern macht das ganze letztendlich auch nicht gerade übersichtlicher.
Grüße
Klaus
[1] Unter Client meine ich hier die Anwendung, welche auf die Datenbank zugreift (also den Cleint aus der Datenbanksicht), welche selbst durchaus auch ein Serverprozess sein kann.