Hallo,
Ich habe ein Triggerproblem:
Ich habe ein kleines Programm in VB 6.0 geschrieben, dass mir eine Tabelle auf einer Oracle Datenbank (10g) erstellen lässt.
In der Tabelle bilde ein Autowertfeld nach, in dem ich eine Sequenz und einen Trigger auf diese Sequenz bezogen per SQL-Befehl erstellen lasse. Das Erstellen funktioniert so , dass ich einen SQL-String zusammenbaue und diesen dann an den Oracle Server schicke.
Der Code um die Sequenz zu erstellen lautet:
Sequenzname = „SEQ_IDNR001_auto“
'***SEQUENZ ERSTELLEN ************************************************
SQLStr = „“
SQLStr = „CREATE SEQUENCE „““ & Schema & „“".""" & Sequenzname & „“" "
SQLStr = SQLStr & " INCREMENT BY 1 "
SQLStr = SQLStr & " START WITH " & (MAXAUTOWERT + 1) & " "
SQLStr = SQLStr & " MINVALUE 1 "
SQLStr = SQLStr & " NOCYCLE "
SQLStr = SQLStr & " CACHE 20 NOORDER"
AdoSQLServerCon.Execute SQLStr
Der Code um den trigger erstellen zu lassen lautet:
Triggername = „TestTRIG“
Autowertfeld=„IDNR001“
SQLStr = „“
SQLStr = „create or replace trigger " & Triggername
SQLStr = SQLStr & " before insert on " & DBTable & " for each row“
SQLStr = SQLStr & " begin "
SQLStr = SQLStr & " if :new." & AUTOWERTFeld & " is null then"
SQLStr = SQLStr & " select " & Sequenzname & „.nextval into :new.“ & AUTOWERTFeld & " from dual;"
SQLStr = SQLStr & " end if; "
SQLStr = SQLStr & " end; "
AdoSQLServerCon.Execute SQLStr
Die Syntax zum Erstellen des triggers habe ich aus einem Artikel aus dem Oracle-Forum
Die Sequenz und der Trigger werden erstellt. Ich benutze zur Kontrolle die Oracle Enterprise Manager-Konsole.
In der Tabelle unter Trigger sehe ich jedoch, dass dieser Trigger einen roten Kreis mit einem weissen x darin besitzt. as bedeutet, dass dieser trigger NICHT funktioniert.
Wenn ich über die Konsole den Code des Tiggers mir anschaue steht da dann folgendes:
begin if :new.IDNR001$ is null then select SEQ_IDNR001_auto.nextval into :new.IDNR001$ from dual; end if; end;
Lasse ich diesen Code neu kompilieren (ich klicke auf die Taste kompilieren" in der Kosnsole in der triggeransicht) dann kommt folgende Fehlermeldung:
Zeilen-# = 1 Spalten-# = 37 Fehlertext = PL/SQL: SQL Statement ignored
Zeilen-# = 1 Spalten-# = 44 Fehlertext = PL/SQL: ORA-02289: Sequence
Ich behaupte die Sequenz ist da ich kann Sie in der Sequenzansicht sehen : Da steht die generierte Sequenz mit dem namen „SEQ_IDNR001_auto“. Ich kann Sie in der Liste mit genau DIESEM Namen sehen !!!
Was ist hier los ?
Ich habe das Ganze vor ca. 2 Monaten programmiert und hatte alles funktioniert !!!
Jetzt auf einmal funktioniert der Trigger nicht mehr wie kann das sein ?
Weis jemand Rat und kann mir helfen ?
Ich habe auch noch andere Tabellen in der Datenbank und ALLE sind auf einmal deaktiviert (wie oben beschrieben) !
Ich weiß mir keinen Rat, da die Syntax exakt dem Artikel im Oracle Forum entnommen ist und es nicht mehr funktioniert.
Meine Oracle 10g Datenbank ist eine kostenlose Version für Entwickler und wurde von mir vor ca 1. Jahr installiert.
frustrierte Grüße
Niels