Zum Inhalt springen

AdoDB Oracle/MySQL Trigger!?


Empfohlene Beiträge

Geschrieben

Hallo allerseits,

ich verwende in einem Projekt AdoDB, bisher mit MySQL (was auch problemlos lief). Nun hat sich die DB auf Oracle geändert und ich sagte noch unwissend, dass dies kein Problem sei und ich aufgrund des Datenbanklayers nur die Verbindungsdaten anpassen müsste.

Allerdings ist es nun so, dass Oracle bei den INSERT-Statements immer ein "INSERT (id, foo) VALUES (aSequence.nextVal, 'fooString')" erwartet, während ich ja bei MySQL mit "INSERT (foo) VALUES ('fooString')" ausgekommen bin (da PK, auto_increment).

Ich hörte dass ich das Statement evt. so lassen könnte wenn ich einen Trigger bei Oracle implementiere, "der auf Inserts (BEFORE INSERT) reagiert und den nächsten Wert der Sequenz in das entsprechende Feld schreibt". Wie funktioniert das, bzw. wie müsste der PL/SQL-Block aussehen?

Oder habt ihr einen ganz anderen Vorschlag?

Viele Grüße,

erdnah

Geschrieben

Jo, danke. Jetzt brauch ich nur noch ein paar mehr Rechte hier im Unternehmen, damit ich das ausprobieren kann. Scheinbar haben Trigger noch einmal unabhängige eigene Rechte?!

Habe direkt noch einmal weiter geschaut unter dem Link, und bin auf http://www.php-faq.de/q/q-oracle-langer-text.html ("Wie speichere ich Datensätze mit mehr als 2000 Zeichen ab?") gestoßen. Das Problem dürfte dann bei mir auch auftreten. Was kann ich denn da machen?

Geschrieben
Scheinbar haben Trigger noch einmal unabhängige eigene Rechte?!

Eigentlich haben Trigger keine eigenen Rechte, wenn innerhalb eines Triggers aber auf Datenbankobjekte zugegriffen wird, dann geschieht dies mit den Rechten des Benutzers dessen Aktion den Trigger ausgelöst hat. Wenn jetzt dein aktiver Benutzer "A" auf eine Sequenz zugreifen will, auf die er keine Rechte hat, gibt das natürlich ein Problem.

Was deine langen Zeichenketten angeht:

1. Der Datentyp VARCHAR2 kann Zeichenketten bis 4000 Zeichen speichern.

Hierbei ist es allerdings wichtig, dass du wie im von dir geposteten Link beschrieben mit Bind Variablen arbeitest. Bind Variablen haben unter Oracle den interessanten Effekt, das der SQLParser das Statement bei der 2ten - xten Ausführung wiedererkennt und es kein zweites mal scannt sondern nur noch die neuen Werte für die Bind Variablen einfügt. Das bringt gerade bei langen Statements, die sich oft wiederholen riesige Performancegewinne.

2. Solltest du tatsächlich Felder haben, die mehr als 4000 Zeichen enthalten, müßtest du hierfür den Datentypen CLOB verwenden. Wie PHP mi diesem umgehen kann, kann ich dir aber leider nicht sagen.

Gruß

Nils

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...