Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Dapatkan Talian DBMS_OUTPUT daripada Prosedur Oracle Menggunakan JDBC?

Bagaimanakah Saya Boleh Dapatkan Talian DBMS_OUTPUT daripada Prosedur Oracle Menggunakan JDBC?

Susan Sarandon
Lepaskan: 2025-01-03 00:00:40
asal
629 orang telah melayarinya

How Can I Retrieve DBMS_OUTPUT Lines from Oracle Procedures Using JDBC?

Mengekstrak DBMS_OUTPUT Lines menggunakan JDBC

Prosedur dbms_output.get_lines membolehkan mendapatkan semula output daripada prosedur Oracle yang dilaksanakan dalam aplikasi Java menggunakan JDBC. Untuk mencapai ini tanpa membuat objek pangkalan data, pertimbangkan langkah berikut:

  1. Dayakan Penimbalan Output Pelayan: Gunakan dbms_output.enable() untuk mengaktifkan penimbalan untuk output pelayan.
  2. Populate Buffer: Ajak dbms_output.put_line() ke simpan baris keluaran dalam penimbal.
  3. Dapatkan Kembali Talian Penimbalan JDBC: Guna CallableStatement untuk melaksanakan pertanyaan dinamik yang memanggil dbms_output.get_lines dan mendaftarkan baris yang diambil sebagai Array.
  4. Lumpuhkan Penimbalan Output: Laksanakan dbms_output.disable() untuk mengelakkan limpahan penimbal.

Contoh Kod:

try (CallableStatement call = c.prepareCall(
  "declare \n"
  + "  num integer := 1000;\n" // Adjust value as needed
  + "begin \n"
  + "  dbms_output.enable();\n"
  + "  dbms_output.put_line('abc');\n"
  + "  dbms_output.put_line('hello');\n"
  + "  dbms_output.put_line('so cool');\n"
  + "  dbms_output.get_lines(?, num);\n"
  + "  dbms_output.disable();\n"
  + "end;\n"
)) {
  call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
  call.execute();

  Array array = call.getArray(1);
  System.out.println(Arrays.asList((Object[]) array.getArray()));
}
Salin selepas log masuk

Output:

[abc, hello, so cool, null]
Salin selepas log masuk

Ingat bahawa mendayakan dan melumpuhkan penimbal output menjejaskan keseluruhan sambungan. Oleh itu, adalah mungkin untuk menangkap output merentas berbilang pernyataan JDBC.

Nota: Pendekatan ini mendapatkan maksimum 1000 baris secara lalai. Pertimbangkan untuk menggelung dalam PL/SQL atau mengundi pangkalan data untuk baris tambahan.

Menggunakan jOOQ:

Pengguna jOOQ boleh mengambil output pelayan secara automatik dengan mendayakan FetchServerOutputListener:

DSLContext ctx = DSL.using(c, 
  new Settings().withFetchServerOutputSize(10));
Salin selepas log masuk

Tindakan ini akan log keluaran dalam FetchServerOutputListener dan tangkap output pelayan dalam ExecuteContext::serverOutput.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Talian DBMS_OUTPUT daripada Prosedur Oracle Menggunakan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan