sql >> Base de Datos >  >> RDS >> Oracle

Oracle PL/SQL:exportar datos de una tabla a CSV

Aprende a usar el UTL_FILE paquete para exportar datos de una tabla al archivo CSV en Oracle PL/SQL.

En Oracle, el paquete UTL_FILE contiene muchos procedimientos y funciones para escribir un archivo de texto. A continuación se muestran los detalles de la sintaxis y los pasos necesarios para escribir un archivo:

Sintaxis y pasos para escribir un archivo usando 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);

Ejemplo básico

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;

Como mencioné en el ejemplo anterior, el objeto de directorio MY_DIR debe existir El objeto de directorio en Oracle es una referencia al directorio físico en el servidor. El siguiente es un ejemplo de creación de un objeto de directorio en Oracle:

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

Para obtener más información sobre el objeto de directorio en Oracle, consulte este enlace.

Exportar datos de una tabla a CSV en el ejemplo de Oracle

El siguiente es un ejemplo de un procedimiento almacenado en Oracle, que exportará los datos de la tabla EMP a un archivo 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;

Ahora que se ha creado su procedimiento almacenado, ejecútelo para exportar los datos:

Begin
    exp_emp_data;
End;

Tutoriales relacionados:

  • Utilidad:generar procedimiento PL/SQL para exportar datos de una tabla