Laden...

Wie kann ich einen Oracle Trigger über C# setzen?

Erstellt von Pardasus vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.530 Views
P
Pardasus Themenstarter:in
63 Beiträge seit 2016
vor 5 Jahren
Wie kann ich einen Oracle Trigger über C# setzen?

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... 😉

16.806 Beiträge seit 2008
vor 5 Jahren

Nimm doch einfach https://github.com/fluentmigrator/fluentmigrator
Der nimmt Dir das alles ab - auch für Oracle gibts nen offiziellen Runner.

P
Pardasus Themenstarter:in
63 Beiträge seit 2016
vor 5 Jahren

Danke für den Tip, muss aber zugeben nicht zu verstehen was das macht bzw. wie man dies nutzt.

16.806 Beiträge seit 2008
vor 5 Jahren

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 😉

https://fluentmigrator.github.io/

4.931 Beiträge seit 2008
vor 5 Jahren

Schon mal versucht, das ganze in eine Transaction zu packen (anstatt jedesmal ein COMMIT abzusetzen)?

P
Pardasus Themenstarter:in
63 Beiträge seit 2016
vor 5 Jahren

@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.

16.806 Beiträge seit 2008
vor 5 Jahren

@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.