Novedades
Música
 
Imagen, foto o portada de Si Biri Bop de Nacho, Jerry Di (Canción, 2023)
Si Biri Bop de Nacho, Jerry Di (Canción, 2023)
Imagen, foto o portada de EVEREST de Ramón Vega (Canción, 2023)
EVEREST de Ramón Vega (Canción, 2023)
Imagen, foto o portada de La Luz de Luis Figueroa (Canción, 2023)
La Luz de Luis Figueroa (Canción, 2023)
Imagen, foto o portada de Cálmame de Sixto Rein (Canción, 2023)
Cálmame de Sixto Rein (Canción, 2023)
Imagen, foto o portada de Si Le Gritan Pu (feat. Chris Andrew) de Cauty, Junior Caldera, Razzer Buccarelli (Canción, 2023)
Si Le Gritan Pu (feat. Chris Andrew) de Cauty, Junior Caldera, Razzer Buccarelli (Canción, 2023)
Imagen, foto o portada de Helicóptero de El Alfa (Canción, 2023)
Helicóptero de El Alfa (Canción, 2023)
Imagen, foto o portada de Factura de Kobi Cantillo (Canción, 2023)
Factura de Kobi Cantillo (Canción, 2023)
Imagen, foto o portada de El Hombre de Elena Rose (Canción, 2023)
El Hombre de Elena Rose (Canción, 2023)
Imagen, foto o portada de REMIX EXCLUSIVO de Feid (Canción, 2023)
REMIX EXCLUSIVO de Feid (Canción, 2023)
Imagen, foto o portada de Tiempo Indefinido de Susana Cala (Canción, 2023)
Tiempo Indefinido de Susana Cala (Canción, 2023)
Imagen, foto o portada de Twerk de Hozwal, Nio García (Canción, 2023)
Twerk de Hozwal, Nio García (Canción, 2023)
Imagen, foto o portada de Terraza de Gustavo Elis, Jeeiph, Jimmix (Canción, 2023)
Terraza de Gustavo Elis, Jeeiph, Jimmix (Canción, 2023)
Imagen, foto o portada de En Bajita de Justin Quiles, Natti Natasha, Omar Courtz (Canción, 2023)
En Bajita de Justin Quiles, Natti Natasha, Omar Courtz (Canción, 2023)
Imagen, foto o portada de LA SANTA de Lola Indigo (Canción, 2023)
LA SANTA de Lola Indigo (Canción, 2023)
Imagen, foto o portada de En La Intimidad de Jowell & Randy, Nicky Jam (Canción, 2023)
En La Intimidad de Jowell & Randy, Nicky Jam (Canción, 2023)
Imagen, foto o portada de Cosas Locas 2.0 (feat. Juseph & Lucho RK) de Danny Romero, Saiko, Soge Culebra (Canción, 2023)
Cosas Locas 2.0 (feat. Juseph & Lucho RK) de Danny Romero, Saiko, Soge Culebra (Canción, 2023)
Imagen, foto o portada de X 1 BESO de Ryan Castro, De La Ghetto (Canción, 2023)
X 1 BESO de Ryan Castro, De La Ghetto (Canción, 2023)
Imagen, foto o portada de Cuánto Quieres (feat. Brray) de Genio, Justin Quiles, Juhn (Canción, 2023)
Cuánto Quieres (feat. Brray) de Genio, Justin Quiles, Juhn (Canción, 2023)
Imagen, foto o portada de Boom Boom Rumbun de Bulova (Canción, 2023)
Boom Boom Rumbun de Bulova (Canción, 2023)
Imagen, foto o portada de Llévame En Tus Sueños de Felipe Peláez, El Cartel Vallenato (Canción, 2023)
Llévame En Tus Sueños de Felipe Peláez, El Cartel Vallenato (Canción, 2023)
Imagen, foto o portada de LUNA de Jd Pantoja, Kim Loaiza (Canción, 2023)
LUNA de Jd Pantoja, Kim Loaiza (Canción, 2023)
Imagen, foto o portada de Arranca (feat. Omega) de Becky G, Omega (Canción, 2023)
Arranca (feat. Omega) de Becky G, Omega (Canción, 2023)
Imagen, foto o portada de Quién de Dayanara, Américo (Canción, 2023)
Quién de Dayanara, Américo (Canción, 2023)
Imagen, foto o portada de Olvidar de Angel22 (Canción, 2023)
Olvidar de Angel22 (Canción, 2023)
Imagen, foto o portada de No Me Controles de Rvssian, Danny Ocean, Sean Paul (Canción, 2023)
No Me Controles de Rvssian, Danny Ocean, Sean Paul (Canción, 2023)
Imagen, foto o portada de Anoche de ITZZA PRIMERA (Canción, 2023)
Anoche de ITZZA PRIMERA (Canción, 2023)
Imagen, foto o portada de lo que hay x aquí de Rels B (Canción, 2023)
lo que hay x aquí de Rels B (Canción, 2023)
Imagen, foto o portada de Bye de Juan Magán, Kidd Keo (Canción, 2023)
Bye de Juan Magán, Kidd Keo (Canción, 2023)
Imagen, foto o portada de AWCH de Angela Torres (Canción, 2023)
AWCH de Angela Torres (Canción, 2023)
Imagen, foto o portada de Friendzone de Marconi Impara, Alejo (Canción, 2023)
Friendzone de Marconi Impara, Alejo (Canción, 2023)
Imagen, foto o portada de NO voy a llorar :') de NICKI NICOLE (Canción, 2023)
NO voy a llorar :') de NICKI NICOLE (Canción, 2023)
Imagen, foto o portada de After Party de Kevin Roldán, Bryant Myers (Canción, 2023)
After Party de Kevin Roldán, Bryant Myers (Canción, 2023)
Imagen, foto o portada de La Reina de Maluma (Canción, 2023)
La Reina de Maluma (Canción, 2023)
Imagen, foto o portada de AGUARDIENTE de Myke Towers (Canción, 2023)
AGUARDIENTE de Myke Towers (Canción, 2023)
Imagen, foto o portada de La Difícil de Fanny Lu (Canción, 2023)
La Difícil de Fanny Lu (Canción, 2023)
Imagen, foto o portada de Deep Trip de Ir Sais (Canción, 2023)
Deep Trip de Ir Sais (Canción, 2023)
Imagen, foto o portada de Be Con Be de Noriel, Pailita (Canción, 2023)
Be Con Be de Noriel, Pailita (Canción, 2023)
Imagen, foto o portada de Tiempo Perdido de Lu Decker (Canción, 2023)
Tiempo Perdido de Lu Decker (Canción, 2023)
Imagen, foto o portada de Puesto Pal Dinero de JC La Nevula (Canción, 2023)
Puesto Pal Dinero de JC La Nevula (Canción, 2023)
Imagen, foto o portada de Como Agua de Rafa Pabön (Canción, 2023)
Como Agua de Rafa Pabön (Canción, 2023)
Imagen, foto o portada de For You de Jay Wheeler (Canción, 2023)
For You de Jay Wheeler (Canción, 2023)
Imagen, foto o portada de Gris de Juanes (Canción, 2023)
Gris de Juanes (Canción, 2023)
Imagen, foto o portada de Para No Verte Más de Thalia, Kenia Os (Canción, 2023)
Para No Verte Más de Thalia, Kenia Os (Canción, 2023)
Imagen, foto o portada de Ronca de Lunay (Canción, 2023)
Ronca de Lunay (Canción, 2023)
Imagen, foto o portada de Tu Recuerdo de Wisin, Emilia, Lyanno (Canción, 2023)
Tu Recuerdo de Wisin, Emilia, Lyanno (Canción, 2023)
Imagen, foto o portada de Más de Ti de Brytiago, Randy (Canción, 2023)
Más de Ti de Brytiago, Randy (Canción, 2023)
Imagen, foto o portada de Abajito de Lele Pons, Guaynaa (Canción, 2023)
Abajito de Lele Pons, Guaynaa (Canción, 2023)
Imagen, foto o portada de Mas Rica Que Ayer de Anuel AA, Mambo Kingz, Dj Luian (Canción, 2023)
Mas Rica Que Ayer de Anuel AA, Mambo Kingz, Dj Luian (Canción, 2023)
Internet
 
Marcas Y Productos
 
Leng. De Program.
 
Listas De Páginas
 
Lo+ Visto
Base De Datos
  1. Enorable
  2. Base De Datos
  3. Oracle
 
12/11/2019 |  vistas:

Oracle: leer los datos de un archivo e insertarlos en una tabla con PL/SQL

Oracle: leer los datos de un archivo e insertarlos en una tabla con PL/SQLEjemplo de cómo leer un archivo con extensión .csv o .txt con registros delimitados por coma, dos puntos o punto y coma, para luego insertarlos en una tabla de la base de datos de Oracle haciendo uso de PL/SQL.

En el mercado actual de la tecnología nos encontramos muchas veces con sistemas informáticos, aplicaciones y herramientas administrativas que pueden ofrecer la opción de poder exportar ciertos datos para su posterior uso de parte de los usuarios. Pero en el ámbito del desarrollo, el objetivo principal de trabajar con este tipo de opciones se visualiza cuando se requiere realizar la migración de una data, de un sistema a otro e incluso recuperar alguna información que se haya perdido anteriormente, o cuando la información se ha vuelto inconsiste o corrupta y amerita una restauración desde algún punto del sistema.

Cuando trabajamos con la plataforma de Oracle este proceso también es posible a través de diferentes métodos. En esta oportunidad voy a mostrar un recurso que ya es muy conocido por muchos para lograr leer datos que se encuentran escritos en un archivo externo con una extensión .csv o .txt, estando los campos delimitados por un carácter especial, como por ejemplo: dos puntos (:) o punto y coma (;).

Leer y guardar los datos desde un un archivo externo con PL/SQL

Existe una manera sencilla de leer un archivo externo mediante el uso del lenguaje interno de Oracle (PL/SQL) y la utilidad de UTL_FILE, insertar sus valores en una tabla de la base de datos y posteriormente hacer uso de la información almacenada.

Dicho proceso se puede realizar directamente desde un bloque anónimo en PL/SQL, pero aquí dejaré un procedimiento para que su uso sea regular, aunque primero que nada, debemos crear una tabla «temporal» para alcanzar el objetivo que nos hemos trazado.

Nota: Si este recurso te ha servido de ayuda recuerda que puedes apoyar mi trabajo realizando una contribución a través de mi perfil de usuario de la página y/o puedes enviar tus comentarios a través del sistema de contacto.

Crear un archivo .csv o .txt

Para este ejemplo se debe crear un archivo con extensión .csv o .txt delimitado por el caracter especial punto y coma (;), en una ruta específica del servidor donde se encuentra alojada la base de datos y debe contener las siguientes líneas de datos:

00000;LINDA;HAMIL;35;F;LA PLATA;BUENOS AIRES;ARGENTINA
12345;JOSE;ROJAS;25;M;SEATTLE;WASHINGTON;ESTADOS UNIDOS
98765;MARIA;PEREZ;50;F;CUA;MIRANDA;VENEZUELA
54321;RAUL;GONZALES;20;M;SANTIAGO;METROPOLITANA DE SANTIAGO;CHILE
56789;LUISA;VIVAS;40;F;MADRID;MADRID;ESPAÑA

Crear una tabla temporal para guardar los datos extraídos del archivo externo

Creamos una tabla nombrada «MI_TABLA_TEMP» para almacenar la información que se usará luego. La misma acepta solo ocho (8) campos, tal y como se describe a continuación:

CREATE TABLE MI_TABLA_TEMP (MYID NUMBER NOT NULL,
NAMES VARCHAR2 (100) NULL,
OLD_NAMES VARCHAR2 (100) NULL,
AGE NUMBER NULL,
SEX VARCHAR2(10) NULL,
CITY VARCHAR2 (100),
STATE VARCHAR2 (100),
COUNTRY VARCHAR2 (100));
Table created.

Crear un procedimiento para extraer los datos contenidos en un archivo .csv

Vamos a crear nuestro procedimiento nombrado «P_SPLIT» para leer el archivo con extensión .csv, usar la información que contiene para insertarlos ordenadamente en una tabla de la base de datos, y así poder manipularla a discreción.

NOTA: Es obligatorio conceder permisos especiales al usuario que corre el script para poder tener acceso a las opciones de lectura y escritura del archivo que se encuentra en la ruta descrita. En caso de que el archivo se encuentre en una ruta sin permisos deberá crear un «enlace simbólico» a través de comandos SQL de la siguiente manera:

SQL> CREATE DIRECTORY log_dir AS '/home/usr/scripts';
SQL> GRANT READ ON DIRECTORY log_dir TO DBA;
SQL> GRANT WRITE ON DIRECTORY log_dir TO DBA;
ó
SQL> CREATE DIRECTORY USER_DIR AS '/home/usr/scripts/';
SQL> GRANT READ ON DIRECTORY USER_DIR TO PUBLIC;
SQL> GRANT WRITE ON DIRECTORY USER_DIR TO PUBLIC;

Una vez que tengamos resuelta esta situación, entonces podemos correr nuestro procedimiento.

CREATE OR REPLACE PROCEDURE P_SPLIT (p_ruta IN VARCHAR2,
p_filename IN VARCHAR2,
p_deli IN VARCHAR2 := ':')
IS
/* ************************************************************************************
* Procedimiento: p_split
* Descripción: Permite separar las columnas de un archivo .csv o .txt por un delimitador
* Parámetros: p_filename Nombre del archivo
* p_ruta Ruta en la base de datos para UTL_FILE
* p_deli Delimitador dentro del archivo
* *********************************************************************************
*/
v_archivo UTL_FILE.FILE_TYPE; -- variable que contendrá el archivo
v_linea VARCHAR2 (32767);
v_lineab VARCHAR2 (32767);
v_idx pls_integer;
v_nrocampo NUMBER := 0;
v_salida VARCHAR2 (255);
v_reg NUMBER:= 0;
BEGIN
-- Abrir el archivo «myfile.csv» ubicado en «/home/usr/scripts»
v_archivo := UTL_FILE.FOPEN (p_ruta,p_filename,'R');
LOOP
v_salida := ''; -- inicializar la variable v_salida
BEGIN
UTL_FILE.GET_LINE (v_archivo, v_linea); -- leer las líneas del v_archivo y capturar sus datos en memoria
v_lineab := v_linea;
v_reg := v_reg + 1; -- conteo de filas
LOOP
v_nrocampo := v_nrocampo + 1; -- conteo de campos
v_idx := instr (v_lineab,p_deli); -- la posición del caracter delimitador que define el campo
-- Leer y organizar los datos contenidos en el archivo
IF v_idx > 0 THEN
v_linea := (SUBSTR (v_lineab,1,v_idx-1));
v_lineab := SUBSTR (v_lineab,v_idx + LENGTH (p_deli));
ELSE
v_linea := (SUBSTR (v_lineab,1,LENGTH (v_lineab)));
END IF;
v_salida := v_salida || '''' || v_linea || ''','; -- armar los datos leídos para crear el Insert
EXIT WHEN v_idx < 0 OR v_idx = 0;
END LOOP;
-- Armar DML para insertarlos en la tabla temporal MI_TABLA_TEMP
v_salida := 'INSERT INTO MI_TABLA_TEMP VALUES (' || SUBSTR (v_salida,1,LENGTH (v_salida)-1) || ');';
DBMS_OUTPUT.PUT_LINE (v_salida); -- se imprime la salida final
EXECUTE IMMEDIATE v_salida; -- ejecuta la salida para insertar los datos en la tabla
EXCEPTION
WHEN OTHERS
THEN
EXIT;
END;
END LOOP;
COMMIT;
UTL_FILE.FCLOSE (v_archivo); -- cerrar el archivo abierto
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR: Se ha presentado un problema en el proceso.');
END;
/
Procedure created.

Ejecutar el procedimiento P_SPLIT

Para probar el procedimiento creado creamos un bloque anónimo y pasamos los parámetros requeridos de la siguiente manera:

BEGIN
P_SPLIT('/home/usr/scripts','archivo.csv',';');
END;
Statement processed.

Siendo el resultado impreso como el que se muestra a continuación:

INSERT INTO MI_TABLA_TEMP VALUES ('00000','LINDA','HAMIL','35','F','LA PLATA','BUENOS AIRES','ARGENTINA');
INSERT INTO MI_TABLA_TEMP VALUES ('12345','JOSE','ROJAS','25','M','SEATTLE','WASHINGHTON','ESTADOS UNIDOS');
INSERT INTO MI_TABLA_TEMP VALUES ('98765','MARIA','PEREZ','50','F','CUA','MIRANDA','VENEZUELA');
INSERT INTO MI_TABLA_TEMP VALUES ('54321','RAUL','GONZALES','20','M','SANTIAGO','METROPOLITANA DE SANTIAGO','CHILE');
INSERT INTO MI_TABLA_TEMP VALUES ('56789','LUISA','VIVAS','40','F','MADRID','MADRID','ESPAÑA');

Si no ha ocurrido un error en la compilación del procedimiento y al ejecutar el proceso todo resulta como se espera, es posible verificar que los datos estén contenidos en la tabla «MI_TABLA_TEMP», siendo los mismos que aparecieron en la salida anterior.
Consulta Lo+ Top de Base De Datos
Todos los titulares en un solo lugar...