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
686 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!

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