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

Wie rufe ich Oracles DBMS_OUTPUT mit JDBC ab?

Linda Hamilton
Linda HamiltonOriginal
2025-01-04 04:35:39894Durchsuche

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

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

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!

Stellungnahme:
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