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