Maison >base de données >tutoriel mysql >Comment récupérer le DBMS_OUTPUT d'Oracle à l'aide de JDBC ?
Récupération de DBMS_OUTPUT.get_lines à l'aide de JDBC
Lors de l'utilisation de dbms_output.get_lines d'Oracle dans une application Java, JDBC fournit un moyen d'obtenir la sortie sans créer des objets de base de données supplémentaires. Cette approche implique une série d'étapes :
Voici un exemple d'extrait de code qui illustre ce processus :
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(); } }
Utilisation de jOOQ
Si vous utilisez la bibliothèque jOOQ, vous pouvez récupérer automatiquement la sortie du serveur pour les requêtes en l'activant dans les paramètres object:
DSLContext ctx = DSL.using(c, new Settings().withFetchServerOutputSize(10));
La sortie du serveur sera disponible dans ExecuteContext::serverOutput après l'exécution de la requête.
Attention contre DBMS_OUTPUT.GET_LINE
Alors que DBMS_OUTPUT.GET_LINE récupère les lignes individuellement, les tests ont montré un ralentissement significatif par rapport à l'utilisation DBMS_OUTPUT.GET_LINES, même en PL/SQL. Par conséquent, l'approche groupée utilisant DBMS_OUTPUT.GET_LINES est recommandée pour des raisons d'efficacité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!