erdnah Geschrieben 26. Januar 2006 Teilen Geschrieben 26. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 26. Januar 2006 Teilen Geschrieben 26. Januar 2006 Hi, guck mal hier: http://www.php-faq.de/q/q-oracle-inkrement.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
erdnah Geschrieben 26. Januar 2006 Autor Teilen Geschrieben 26. Januar 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
tuxfriend Geschrieben 29. Januar 2006 Teilen Geschrieben 29. Januar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.