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
Libérer: 2025-01-03 00:00:40
original
629 Les gens l'ont consulté

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()));
}
Copier après la connexion

Sortie :

[abc, hello, so cool, null]
Copier après la connexion

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));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal