Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

AdoDB Oracle/MySQL Trigger!?

Empfohlene Antworten

Veröffentlicht

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

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?

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.