Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle PL/SQL :Exporter les données d'une table vers CSV

Apprenez à utiliser le UTL_FILE package pour exporter les données d'une table vers le fichier CSV dans Oracle PL/SQL.

Dans Oracle, le package UTL_FILE contient de nombreuses procédures et fonctions pour écrire un fichier texte. Vous trouverez ci-dessous les détails de la syntaxe et les étapes nécessaires pour écrire un fichier :

Syntaxe et étapes pour écrire un fichier en utilisant UTL_FILE

-- Declare a variable to store file type
n_file UTL_FILE.FILE_TYPE;
-- Open the file in Begin section, it will open the file and return the file handle into the variable n_file
n_file := UTL_FILE.FOPEN('DIR_OBJ', 'YourCSVFileName.csv', 'w', 4000);
-- Write a single or multiple lines
UTL_FILE.PUT_LINE(n_file, 'abc, xyz, xxx');
-- Close the file
UTL_FILE.FCLOSE(n_file);

Exemple de base

Declare
   n_file Utl_File.File_Type;
Begin
   -- The directory object MY_DIR must be exist or create a new one
   n_file := Utl_File.Fopen('MY_DIR', 'myfile.csv', 'w', '4000');

   Utl_File.Put_Line(n_file, 'First line.');
   Utl_File.Put_Line(n_file, 'Second line.');
   Utl_File.Put_Line(n_file, 'Third line.');

   Utl_File.Fclose(n_file);
End;

Comme je l'ai mentionné dans l'exemple ci-dessus, l'objet répertoire MY_DIR doit exister. L'objet répertoire dans Oracle est une référence au répertoire physique sur le serveur. Voici un exemple de création d'un objet répertoire dans Oracle :

-- Windows example
CREATE OR REPLACE DIRECTORY CSVDIR AS 'd:\oracle\csvfiles';
-- Linux example
CREATE OR REPLACE DIRECTORY CSVDIR AS '/usr1/oracle/csvfiles';

Pour en savoir plus sur l'objet répertoire dans Oracle, consultez ce lien.

Exporter des données d'une table vers CSV dans Oracle Example

Voici un exemple de procédure stockée dans Oracle, qui exportera les données de la table EMP vers un fichier CSV :

Create Or Replace Procedure exp_emp_data Is

    n_file     utl_file.file_type;
    v_string   Varchar2(4000);
   
  -- get the data using cursor 
  Cursor c_emp Is
    Select
        empno,
        ename,
        deptno,
        sal,
        comm
    From
        emp;

Begin
    n_file := utl_file.fopen('CSVDIR', 'empdata.csv', 'w', 4000);

-- if you do not want heading then remove below two lines
    v_string := 'Emp Code, Emp Name, Dept, Salary, Commission';
    utl_file.put_line(n_file, v_string);
    
    -- open the cursor and concatenate fields using comma
    For cur In c_emp Loop
        v_string := cur.empno
                    || ','
                    || cur.ename
                    || ','
                    || cur.deptno
                    || ','
                    || cur.sal
                    || ','
                    || cur.comm;
        
        -- write each row
        utl_file.put_line(n_file, v_string);
    End Loop;
    
    -- close the file
    utl_file.fclose(n_file);
Exception
    When Others Then
        -- on error, close the file if open
        If utl_file.is_open(n_file) Then
            utl_file.fclose(n_file);
        End If;
End;

Maintenant que votre procédure stockée est créée, exécutez-la pour exporter les données :

Begin
    exp_emp_data;
End;

Tutoriels associés :

  • Utilitaire :Générer une procédure PL/SQL pour exporter des données à partir d'une table