verwendetes Datenbanksystem: <Oracle 18.2>
Nach viele Stunden des Probierens und des Suchens, seit ihr nun meine letzte Hoffnung.
Ich möchte, das wenn eine Tabelle nicht in der Datenbank vorhanden ist, neu erstellt wird. Dies ist
ja keine große Sache. Auch den Primary Key setzten und eine Sequence erstellen, alles kein Problem über C#.
Aber wenn ich ein Trigger mit einbauen möchte, der die ID Automatisch hochzählt, will das einfach über C# nicht Funktionieren.
Hier mal ein minimal Beispiel:
CREATE TABLE CUSTOMERS
(
ID NUMBER NOT NULL
, NAME VARCHAR2(20)
, CONSTRAINT CUSTOMERS_PK PRIMARY KEY
(
ID
)
ENABLE
);
CREATE SEQUENCE CUSTOMERS_SEQ;
CREATE TRIGGER CUSTOMERS_TRG
BEFORE INSERT ON CUSTOMERS
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT CUSTOMERS_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
/
Ich lese das SQL Skript mit C# ein, entferne die Leerzeichen und mache ein COMMIT nach jedem ';'
Aber irgendwie will der Trigger nicht. Klar ich kann auch selbst bei jeden Statement ein 'CUSTOMERS_SEQ.NEXTVAL' machen, aber das irgendwie doof.
Ich habe beim Trigger auch mal die ';' entfernt. Dann wird der Trigger zwar in die DB eingespielt, lässt sich aber nicht Kompilieren, da die ';' fehlen.
HILFE... 😉
Nimm doch einfach https://github.com/fluentmigrator/fluentmigrator
Der nimmt Dir das alles ab - auch für Oracle gibts nen offiziellen Runner.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für den Tip, muss aber zugeben nicht zu verstehen was das macht bzw. wie man dies nutzt.
Naja, dann schaus Dir halt erst mal an statt abzulehnen 😉
In der Zeit zwischen Lesen und der Antwort schreiben kannste Dir FluentMigrator gar nicht im Ansatz angeschaut haben 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Schon mal versucht, das ganze in eine Transaction zu packen (anstatt jedesmal ein COMMIT abzusetzen)?
@Abt
der zweite Link hat geholfen 😉 gefällt mir was ich dort sehe.
@Th69
Ja, das habe ich auch probiert. Allerdings bis jetzt ohne Erfolg.
Ich bin gerade ein Stück weiter gekommen. => Hier ≤ hatte jemand ein änhliches Problem und hat unter anderem die "\r"Zeichen entfernt.
Wenn ich nun das erstellen des Triggers in ein separaten SQL Skript lege und dort mit .Trim() die "\r" Zeichen durch ein leeren String austausche, funktioniert es 😃
Jetzt muss ich nur noch ein weg finden wie ich beides in ein SQL Skript wieder bekomme der Übersichtlichst halber.
@Abt
der zweite Link hat geholfen 😉 gefällt mir was ich dort sehe.
Der zweite Link steht im ersten Link einfach ganz oben in der Projektbeschreibung.
Also hast nicht mal die gelesen......? 🤔
Zudem wird in der Beschreibung des ersten Links mehrfach auf die Dokumentation verwiesen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code