PDA

View Full Version : Triggersyntax erzeugt nur Fehler



deni87991
23-08-06, 10:23
Hallo Forum!!

Ich wendet mich heute mit einer Trigger-frage an euch:

Wir wollten einen BEFORE-INSERT-Trigger erstellen, welcher vor dem Einfügen neuer Daten in die Tabelle AUFTRAG nachschaut, ob die neu eingefügten Daten der Spalte "KUNDENNUMMER" in der Spalte "KUNDENNUMMER" in Tabelle KUNDE zu finden ist (schön wäre eine Fehlermeldung, das dieser Kunde noch nicht angelegt ist, aber mit Print '' geht das anscheinend nicht).

Ist diese Kundennummer also noch nicht angelegt, so soll in eine neue Spalte "MENGE" der Wert "XXXXX" eingegeben werden - und das natürlich bei jedem zutreffenden Datensatz.

Unten sind 2 Versionen, mit denen wir es probiert haben - beide gehen aber leider nicht. Es kommen verschiedene Fehlermeldungen, meist, weil ein Befehl jetzt nicht erwartet wurde, wird er jedoch verändert oder gelösche, entsteht der nächste Fehler...irgendwie kommen wir nicht weiter...wäre schön,wenn uns wer helfen könnt.


create trigger Test.Test1 before insert on Test.auftrag
referencing new as new_row
for each row
select * from Test.kunde
where Test.kunde.kundennummer = new_row.kundennummer
begin
SET NEW_ROW.Menge = 'XXXXX';
end

*******************************
create trigger test.Test1 before insert on test.auftrag
referencing new as new_row
for each row
if
((select count(*) from test.kunde
where test.kunde.kundennummer = new_row.kundennummer) > 0)
then
SET NEW_ROW.Menge = 'XXXXX';

B.Hauser
24-08-06, 09:58
Hallo,

Du rätst Dir eine Syntax zusammen, die bei anderen Datenbanken vielleicht funktioniert, aber nicht mit der DB2 UDB for iSeries.

Ich empfehle Dir Dich mal näher mit den folgenden Online-Bücher zu beschäftigen:
1. SQL Reference (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmst.pdf)
2. Modernizing IBM eServer iSeries Application Data Access - A Roadmap Cornerstone
(http://www.redbooks.ibm.com/abstracts/sg246393.html?Open)3. Stored Procedures, Triggers and User Defined Functions on DB2 Universal Database for iSeries (http://www.redbooks.ibm.com/abstracts/sg246503.html?Open)

Ansonsten solltest Du doch mal in Betracht ziehen einen oder mehrere SQL-Kurse speziell für DB2 UDB for iSeries zu belegen.

Birgitta

deni87991
24-08-06, 10:05
Es liegt nicht daran, das ICH das nicht in Betracht ziehen würde; sondern ehr daran das mein Chef dies nicht tut. Lohnt sich halt nicht für einen Azubi, der das Unternehmen eh verlässt.

Desweiteren sind die Sourcen nicht von mir sondern aus der Feder des einzigen Kollegen, der hier mit SQL auf der iSeries arbeitet (wen soll ich fragen, wenn der nicht weiter weiß?).Ein weiterer Kollege arbeitet auf dem SQL-Server, aber die Syntaxunterschiede sind nicht wenige.

Trotzdem danke.