Zum Inhalt springen

AdoDB Oracle/MySQL Trigger!?


erdnah

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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