Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Buat instance java.sql.blob dalam prosedur tersimpan java

Saya salah. Itu bisa dilakukan. Butuh beberapa saat untuk membuatnya berfungsi, tetapi, akhirnya, inilah contoh yang berfungsi:

Kelas Java

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;
  }
}

Seperti yang Anda lihat, saya telah menggunakan oracle.sql.BLOB untuk hasilnya. Saya membuatnya dengan createTemporarystatic statis metode BLOB kelas, menetapkan bahwa itu harus dibuat selama sesi (oracle.sql.BLOB.DURATION_SESSION parameter).

Kemudian, saya mendapatkan OutputStream dan tulis datanya. Flush diperlukan.

Sisi basis data

create or replace FUNCTION getBlobWrp (username IN VARCHAR2) RETURN BLOB
  AS LANGUAGE JAVA NAME
              'TestBlob.getBlob(java.lang.String) return oracle.sql.BLOB';

Tes:

DECLARE
  l_blob BLOB;
BEGIN
  l_blob := getBlobWrp('test');

  dbms_output.put_line(UTL_RAW.CAST_TO_VARCHAR2(l_blob));
END;

Keluaran:

test

(jawaban sebelumnya)

Saya pikir Anda harus memiliki IN OUT BLOB parameter di test_create_excel . Anda function (ubah ke prosedur), dan operasikan parameter itu di dalam metode tersimpan Java Anda. Saya pernah melihat pendekatan itu.

Sebelum memanggil test_create_excel , Anda harus membuat BLOB objek:

DECLARE
  l_blob BLOB;
BEGIN
  DBMS_LOB.createtemporary(l_blob, TRUE);
  test_create_excel('username', l_blob);
END;

Sunting

Saya tidak berpikir apa yang Anda coba lakukan adalah mungkin. Namun, Anda bisa membungkus kode di atas dalam fungsi lain. Agak berantakan, tetapi Anda akan memiliki fungsi yang mengembalikan gumpalan:

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengonversi Angka ke Kata dalam hasil MYSQL! Menggunakan Kueri

  2. Masalah grafik:sambungkan dengan NOCYCLE penggantian sebelumnya di server SQL?

  3. Jumlah baris yang terpengaruh oleh UPDATE di PL/SQL

  4. Bagaimana klausa 'dalam' bekerja di oracle

  5. Permintaan otomatis JDBC berubah menjadi sangat lambat