Heim > Datenbank > MySQL-Tutorial > Wie kann ich DBMS_OUTPUT-Zeilen aus Oracle-Prozeduren mithilfe von JDBC abrufen?

Wie kann ich DBMS_OUTPUT-Zeilen aus Oracle-Prozeduren mithilfe von JDBC abrufen?

Susan Sarandon
Freigeben: 2025-01-03 00:00:40
Original
627 Leute haben es durchsucht

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

Extrahieren von DBMS_OUTPUT-Zeilen mit JDBC

Die Prozedur dbms_output.get_lines ermöglicht den Abruf der Ausgabe von Oracle-Prozeduren, die in einer Java-Anwendung mit JDBC ausgeführt werden. Um dies zu erreichen, ohne Datenbankobjekte zu erstellen, beachten Sie die folgenden Schritte:

  1. Server-Ausgabepufferung aktivieren: Verwenden Sie dbms_output.enable(), um die Pufferung für die Serverausgabe zu aktivieren.
  2. Puffer füllen: Rufen Sie dbms_output.put_line() auf, um Ausgabezeilen innerhalb des zu speichern buffer.
  3. Gepufferte Zeilen JDBC abrufen: Verwenden Sie CallableStatement, um eine dynamische Abfrage auszuführen, die dbms_output.get_lines aufruft und die abgerufenen Zeilen als Array registriert.
  4. Deaktivieren Ausgabepufferung: Führen Sie dbms_output.disable() aus, um Puffer zu vermeiden Überlauf.

Codebeispiel:

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()));
}
Nach dem Login kopieren

Ausgabe:

[abc, hello, so cool, null]
Nach dem Login kopieren

Denken Sie daran, dass aktiviert und Das Deaktivieren des Ausgabepuffers wirkt sich auf die gesamte Verbindung aus. Daher ist es möglich, die Ausgabe über mehrere JDBC-Anweisungen hinweg zu erfassen.

Hinweis: Dieser Ansatz ruft standardmäßig maximal 1000 Zeilen ab. Erwägen Sie eine Schleife in PL/SQL oder das Abfragen der Datenbank nach zusätzlichen Zeilen.

Mit jOOQ:

jOOQ-Benutzer können die Serverausgabe automatisch abrufen, indem sie den FetchServerOutputListener aktivieren:

DSLContext ctx = DSL.using(c, 
  new Settings().withFetchServerOutputSize(10));
Nach dem Login kopieren

Diese Aktion protokolliert die Ausgabe im FetchServerOutputListener und erfasst die Serverausgabe in ExecuteContext::serverOutput.

Das obige ist der detaillierte Inhalt vonWie kann ich DBMS_OUTPUT-Zeilen aus Oracle-Prozeduren mithilfe von JDBC abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage