Ich lag falsch. Es kann getan werden. Ich habe eine Weile gebraucht, um es zum Laufen zu bringen, aber hier ist endlich ein funktionierendes Beispiel:
Java-Klasse
import oracle.jdbc.driver.*;
public class TestBlob {
public static oracle.sql.BLOB getBlob(String username) throws Exception {
oracle.jdbc.OracleConnection conn =
(oracle.jdbc.OracleConnection)new OracleDriver().defaultConnection();
oracle.sql.BLOB retBlob =
oracle.sql.BLOB.createTemporary(conn,
true,
oracle.sql.BLOB.DURATION_SESSION);
java.io.OutputStream outStr = retBlob.setBinaryStream(0);
outStr.write(username.getBytes());
outStr.flush();
return retBlob;
}
}
Wie Sie sehen können, habe ich das oracle.sql.BLOB
verwendet für das Ergebnis. Ich erstelle es mit dem statischen createTemporary
Methode des BLOB
Klasse, die angibt, dass sie für die Dauer der Sitzung erstellt werden soll (oracle.sql.BLOB.DURATION_SESSION
Parameter).
Dann erhalte ich den OutputStream
und die Daten schreiben. Eine Spülung war erforderlich.
Datenbankseite
create or replace FUNCTION getBlobWrp (username IN VARCHAR2) RETURN BLOB
AS LANGUAGE JAVA NAME
'TestBlob.getBlob(java.lang.String) return oracle.sql.BLOB';
Test:
DECLARE
l_blob BLOB;
BEGIN
l_blob := getBlobWrp('test');
dbms_output.put_line(UTL_RAW.CAST_TO_VARCHAR2(l_blob));
END;
Ausgabe:
test
(vorherige Antwort)
Ich denke, Sie sollten einen IN OUT BLOB
haben Parameter in Ihrem test_create_excel
Funktion (ändern Sie sie in eine Prozedur) und bearbeiten Sie diesen Parameter in Ihrer gespeicherten Java-Methode. Ich habe diesen Ansatz einmal gesehen.
Vor dem Aufruf von test_create_excel
, sollten Sie ein BLOB
erstellen Objekt:
DECLARE
l_blob BLOB;
BEGIN
DBMS_LOB.createtemporary(l_blob, TRUE);
test_create_excel('username', l_blob);
END;
Bearbeiten
Ich glaube nicht, dass das, was du vorhast, möglich ist. Sie könnten den obigen Code jedoch in eine andere Funktion einschließen. Es ist ein bisschen chaotisch, aber dann haben Sie eine Funktion, die den Blob zurückgibt:
CREATE OR REPLACE FUNCTION get_excel_blob(p_username VARCHAR2) RETURN BLOB
AS
l_blob BLOB;
BEGIN
DBMS_LOB.createtemporary(l_blob, TRUE);
test_create_excel(p_username, l_blob);
RETURN l_blob;
END;