Heim > Datenbank > MySQL-Tutorial > Wie rufe ich Oracles DBMS_OUTPUT mit JDBC ab?

Wie rufe ich Oracles DBMS_OUTPUT mit JDBC ab?

Linda Hamilton
Freigeben: 2025-01-04 04:35:39
Original
869 Leute haben es durchsucht

How to Retrieve Oracle's DBMS_OUTPUT Using JDBC?

Abrufen von DBMS_OUTPUT.get_lines mit JDBC

Bei Verwendung von Oracles dbms_output.get_lines in einer Java-Anwendung bietet JDBC eine Möglichkeit, die Ausgabe ohne zu erhalten Erstellen zusätzlicher Datenbankobjekte. Dieser Ansatz umfasst eine Reihe von Schritten:

  1. Server-Ausgabepufferung aktivieren:Verwenden Sie dbms_output.enable(), um die Server-Ausgabepufferung zu aktivieren.
  2. Generieren Ausgabe: Führen Sie alle gespeicherten Prozeduren oder Skripte aus, die eine Ausgabe erzeugen und dies auch sein sollen erfasst.
  3. Ausgabe mit DBMS_OUTPUT.get_lines abrufen: Verwenden Sie die CallableStatement-Schnittstelle, um eine Prozedur auszuführen, die dbms_output.get_lines aufruft und ein Array-Objekt als Ausgabeparameter registriert.
  4. Server-Ausgabepufferung deaktivieren: Aufrufen dbms_output.disable(), um einen Pufferüberlauf zu verhindern.

Hier ist ein Beispielcode-Snippet, das diesen Prozess veranschaulicht:

try (CallableStatement call = c.prepareCall(
    "declare "
  + "  num integer := 1000;" // Adapt this as needed
  + "begin "
  + "  dbms_output.enable();"
  + "  dbms_output.put_line('abc');"
  + "  dbms_output.put_line('hello');"
  + "  dbms_output.put_line('so cool');"

  // This captures the output up until now through a PL/SQL TABLE type.
  // Oracle 12c+ uses a SQL cursor, while 11g requires an auxiliary SQL TABLE
  + "  dbms_output.get_lines(?, num);"

  // Disable buffering
  + "  dbms_output.disable();"
  + "end;"
)) {
    call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
    call.execute();

    Array array = null;
    try {
        array = call.getArray(1);
        System.out.println(Arrays.asList((Object[]) array.getArray()));
    }
    finally {
        if (array != null)
            array.free();
    }
}
Nach dem Login kopieren

Verwendung von jOOQ

Wenn Sie die jOOQ-Bibliothek verwenden, können Sie die Serverausgabe für Abfragen automatisch abrufen, indem Sie sie in den Einstellungen aktivieren Objekt:

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

Die Serverausgabe ist nach der Abfrageausführung im ExecuteContext::serverOutput verfügbar.

Vorsicht vor DBMS_OUTPUT.GET_LINE

Während DBMS_OUTPUT.GET_LINE Zeilen einzeln abruft, haben Benchmarks im Vergleich zur Verwendung eine deutliche Verlangsamung gezeigt DBMS_OUTPUT.GET_LINES, auch in PL/SQL. Aus Effizienzgründen wird daher der Massenansatz unter Verwendung von DBMS_OUTPUT.GET_LINES empfohlen.

Das obige ist der detaillierte Inhalt vonWie rufe ich Oracles DBMS_OUTPUT mit JDBC ab?. 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