Maison > base de données > tutoriel mysql > Comment récupérer DBMS_OUTPUT d'Oracle à l'aide de JDBC ?

Comment récupérer DBMS_OUTPUT d'Oracle à l'aide de JDBC ?

Susan Sarandon
Libérer: 2025-01-02 16:59:40
original
457 Les gens l'ont consulté

How to Retrieve DBMS_OUTPUT from Oracle Using JDBC?

Récupération de la sortie de la procédure DBMS_OUTPUT.GET_LINES d'Oracle à l'aide de JDBC

JDBC fournit un moyen d'accéder à la sortie générée par la procédure dbms_output.get_lines d'Oracle sans créer objets supplémentaires dans la base de données. Voici comment y parvenir :

  1. Activer la mise en mémoire tampon de sortie du serveur : Avant d'accéder à la sortie, activez la mise en mémoire tampon sur la connexion actuelle pour capturer toute sortie du serveur :

    dbms_output.enable();
    Copier après la connexion
  2. Stocker la sortie dans la table PL/SQL : Pour capturer le serveur sortie, créez une table en PL/SQL pour stocker la sortie :

    create type DBMSOUTPUT_LINESARRAY as table of varchar2(255);
    Copier après la connexion
  3. Appelez DBMS_OUTPUT.GET_LINES : Utilisez un CallableStatement pour appeler dbms_output.get_lines et transmettez dans la table PL/SQL en sortie paramètre :

    CallableStatement call = c.prepareCall(
     "declare \n"
      + "  num integer := 1000;\n" // Adjust this value as needed
      + "begin \n"
    
      + "  dbms_output.get_lines(?, num);\n"
    
      + "  dbms_output.disable();\n"
      + "end;\n"
    );
    call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
    Copier après la connexion
  4. Désactiver la mise en mémoire tampon de sortie du serveur : Après avoir récupéré la sortie, désactivez la mise en mémoire tampon pour éviter d'éventuels dépassements de tampon :

    dbms_output.disable();
    Copier après la connexion
  5. Accéder à la sortie : La sortie est disponible dans le paramètre out. Vous pouvez utiliser l'API JDBC pour accéder aux éléments de la table.
  6. Exemple de code : Voici un extrait de code pour démontrer le processus :

    try (CallableStatement call = c.prepareCall(
     "declare \n"
      + "  num integer := 1000;\n" 
      + "begin \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 = null;
     try {
         array = call.getArray(1);
         System.out.println(Arrays.asList((Object[]) array.getArray()));
     }
     finally {
         if (array != null)
             array.free();
     }
    }
    Copier après la connexion

Notez que cette approche fonctionne avec Oracle 12c ou version ultérieure. Dans Oracle 11g, vous devrez peut-être utiliser un type SQL TABLE auxiliaire.

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