Maison >base de données >tutoriel mysql >Comment puis-je récupérer les lignes DBMS_OUTPUT des procédures Oracle à l'aide de JDBC ?

Comment puis-je récupérer les lignes DBMS_OUTPUT des procédures Oracle à l'aide de JDBC ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 00:00:40646parcourir

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

Extraction de lignes DBMS_OUTPUT à l'aide de JDBC

La procédure dbms_output.get_lines permet de récupérer la sortie des procédures Oracle exécutées dans une application Java à l'aide de JDBC. Pour ce faire sans créer d'objets de base de données, envisagez les étapes suivantes :

  1. Activer la mise en mémoire tampon de sortie du serveur : utilisez dbms_output.enable() pour activer la mise en mémoire tampon pour la sortie du serveur.
  2. Populate Buffer : appelez dbms_output.put_line() pour stocker les lignes de sortie dans le buffer.
  3. Récupérer les lignes tamponnées JDBC : utilisez CallableStatement pour exécuter une requête dynamique qui appelle dbms_output.get_lines et enregistre les lignes récupérées en tant que tableau.
  4. Désactiver Output Buffering : exécutez dbms_output.disable() pour éviter la mise en mémoire tampon débordement.

Exemple de code :

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

Sortie :

[abc, hello, so cool, null]

N'oubliez pas que l'activation et la désactivation du tampon de sortie affecte l’ensemble de la connexion. Par conséquent, il est possible de capturer le résultat sur plusieurs instructions JDBC.

Remarque : Cette approche récupère un maximum de 1 000 lignes par défaut. Pensez à effectuer une boucle en PL/SQL ou à interroger la base de données pour des lignes supplémentaires.

À l'aide de jOOQ :

les utilisateurs de jOOQ peuvent récupérer automatiquement la sortie du serveur en activant FetchServerOutputListener :

DSLContext ctx = DSL.using(c, 
  new Settings().withFetchServerOutputSize(10));

Cette action enregistrera la sortie dans FetchServerOutputListener et capturera la sortie du serveur dans ExecuteContext::serverOutput.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn