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
Susan Sarandonoriginal
2025-01-02 16:59:40432parcourir

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

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