LONG RAW -> BLOB *argl*

Mehr eine Meinungsäußerung als eine Frage, nachdem wir das ja in einem Thread weiter unten diskutiert hatten, dass mit den BLOBs ist über die Oracle-JDBC-Treiber absolut beschi*en gelöst.

Wenn ich einen neuen Datensatz anlegen will muss ich folgendes tun:

  1. Einfügen des Datensatzes mit einem leeren BLOB (EMPTY_BLOB).
  2. SELECT FOR UPDATE auf diesen Datensatz um eine Referenz auf den BLOB zu erhalten
  3. UPDATE-Statement absetzen, beim füllen der Werte des Update-Statements kann ich das BLOB-Objekt das ich vorher vom SELECT bekommen habe verwenden.

Falls jemand eine bessere Methode weiss wäre ich dankbar, hab das aber in mehreren Beispielen im Web so gesehen, glaub das ist einfach so. :o(

Grüße, Robert

PS: Bei LONG RAW konnte man einfach beim INSERT ein byte-Array übergeben.

Ergänzung
Eigentlich macht das INSERT eine Stored Procedure, d. h. ich wäre schon glücklich wenn ich der Stored Procedure einen BLOB übergeben könnte.

Grüße, Robert

Lösung
Hab eine halbwegs einfache Lösung gefunden. Eine kleine Funktion erzeut einen temporären BLOB-Locator und gibt ihn zurück. Schaut so aus:

FUNCTION AGG.CREATE\_BLOB
RETURN BLOB
AS
 blobTemp BLOB;
BEGIN
 DBMS\_LOB.CREATETEMPORARY( blobTemp, true );
 RETURN blobTemp;
END;

Den BLOB-Locator kann ich dann in Java mit Daten füttern und dann sowohl an eine Stored Procedure als auch an ein „normales“ Statement übergeben.

Ist zwar noch immer nicht so einfach wie mit LONG RAW, aber viel besser als das mit INSERT/SELECT/UPDATE. :o)

Grüße, Robert