PDA

View Full Version : Primary Key über Trigger erstellen



C_Dewald
05-08-03, 15:51
Hallo Forum,

ich möchte über einen Before Insert Trigger, der eine Stored Procedure aufruft eine Id generieren und in den neu eingefügten Datensatz als Schlüssel eintragen.

Siehe dazu bitte die Beispiele in der Textdatei.

Leider erhalte ich die Fehlermeldung daß eine Prozedur (in diesem Fall vermutlich der Trigger), die mit dem Attribut READS OR CONTAINS SQL DATA keine Prozedur mit dem Attribut MODIFIES SQL DATA aufrufen darf.

Wie ist sinnvollerweise das beste Vorgehen bei der Vergabe
von Schlüsselwerten über einen Trigger ?

Wo findet man Beispiele ?

Danke !

Gruß Claus

Fuerchau
05-08-03, 16:30
Die Vergabe des Schlüssels solltest du direkt im Trigger durchführen und nicht in eine Prozedur verlegen.

Ausserdem würde ich den Schlüsselsatz nicht immer löschen und neu einfügen sondern per UPDATE wegschreiben.
Auch sollte diese Schlüsseldatei einen eigenen Schlüssel (z.B. den Dateinamen) enthalten, so dass du diese für mehrere Dateien verwenden kannst.
Den Init dieser Datei machst du einmalig per STRSQL ("insert into mykeys values('myfile1', 0)").

BenderD
12-08-03, 17:35
Hallo,

SQL Before Trigger dürfen keine Updates durchführen (siehe SQL Reference), dürfen also nicht mit modifies deklariert werden.
Zwei Work arounds sind denkbar:

Einen externen Trigger nehmen, der hat diese Restriktion nicht, oder eine externe Procedure nehmen, die nicht via SQL updated.

Der Weg mit einem Before und einem After Trigger geht auch noch, letzterer darf nämlich den Update machen.

Eleganter ist eigentlich eine SQL Function, die einen Schlüsselwert ermittelt, die müsste sogar als Default gehen.

Für alle obigen Ansätze ist das Transaktionshandling keineswegs trivial!!!

mfg

Dieter Bender