2016-04-06 15 views
1

Ich bin ziemlich unerfahren mit SQL, und ich habe einen sehr grundlegenden Auslöser. Grundsätzlich möchte ich sicherstellen, dass TOTAL auf 0 gesetzt wird, wenn ein Datensatz zuerst eingefügt wird. Insgesamt ist eine Zahl (9,2)Basic Oracle Trigger funktioniert nicht

create or replace trigger TOTAL_INIT before insert on BILL For each row 
Begin 
    :NEW.TOTAL := 0; 
end; 

Wenn ich einfügen, ist es nicht gesetzt TOTAL auf 0, und ich habe keine Ahnung, warum.

+0

Irgendwelche Kompilierungsfehler? Sie können die Kompilierungsfehler erhalten, indem Sie 'select * from SYS.USER_ERRORS ausführen, wobei NAME = 'TOTAL_INIT'' ist. Verpflichten Sie die Transaktion auch? –

+1

Wie sieht dein BILL-Tisch aus? Post create script with constrains –

+0

SQL Developer zeigt keine Fehler im Trigger an, und diese Abfrage hat nichts zurückgegeben. – DFL

Antwort

1

Wie wäre es damit?

alter table bill modify total number(9, 2) default 0; 

Zugegeben, dies ist nicht genau gleich. Ihr Code würde einen explizit angegebenen Wert überschreiben, während dies den Wert auf 0 setzt, wenn kein expliziter Wert angegeben wird.

Ein Trigger ist jedoch möglicherweise nicht für die gewünschte Funktionalität erforderlich.

+0

. Der Standardwert ist bereits 0. Wir möchten, dass dieser Auslöser sicherstellt, dass der Anfangswert immer 0 ist, unabhängig davon, was jemand versucht hineinzulegen . – DFL

+0

Werden Daten über SQL Plus oder SQL Developer eingefügt? Wenn es rein programmatisch ist, sollten Sie nichts brauchen. –

+0

Daten werden in erster Linie über eine Webanwendung eingefügt. Es kann jedoch vorkommen, dass Benutzer sie über ein Skript über SQL Developer einfügen – DFL