2011-06-01 37 views
19

He estado buscando desde hace un tiempo, pero parece que no puede encontrar respuestas así que aquí va ...Oracle: Importar archivo CSV

Tengo un archivo CSV que quiero importar en una tabla en Oracle (9i/10i).

Más tarde planeo usar esta tabla como una búsqueda para otro uso.

Esto es en realidad una solución en la que estoy trabajando ya que el hecho de consultar con la cláusula IN con más de 1000 valores no es posible.

¿Cómo se hace esto usando SQLPLUS?

¡Gracias por su tiempo! :)

+0

Usted debe estar utilizando una combinación en lugar de la cláusula IN. – MikeKulls

+1

"Debería estar usando una combinación en lugar de la cláusula IN". ... lo que haces importando primero una csv a Oracle. –

Respuesta

18

cargador del SQL ayuda de carga de archivos CSV en tablas: SQL*Loader

Si desea sqlplus solamente, entonces se pone un poco complicado. Necesita ubicar su script sqlloader y su archivo csv, luego ejecute el comando sqlldr.

+1

Tienes razón. Un par de investigaciones más me hicieron darme cuenta de que SQL Loader es el camino a seguir para resolver este problema. ¡Gracias! – cr8ivecodesmith

4

Una solución alternativa es usar una tabla externa: http://www.orafaq.com/node/848

Uso esto cuando se tiene que hacer esta importación muy a menudo y muy rápido.

+0

Gracias por el seguimiento. :) – cr8ivecodesmith

+0

Otro enlace: http://www.orafaq.com/wiki/External_table – Vadzim

20

Otra solución que puede usar es SQL Developer.

Con él, tiene la capacidad de importar desde un archivo csv (otros archivos delimitados están disponibles).

Sólo tiene que abrir la vista de tabla, a continuación:

  • elegir acciones
  • datos de importación
  • encontrar su archivo
  • elegir sus opciones.

Usted tiene la opción de tener SQL Developer hacer las inserciones para usted, crear una secuencia de comandos SQL de inserción, o crear los datos para una secuencia de comandos SQL cargador (no hemos probado esta opción yo).

Por supuesto, todo eso es discutible si solo puede usar la línea de comandos, pero si puede probarlo con SQL Developer localmente, siempre puede implementar los scripts de inserción generados (por ejemplo).

Simplemente agregando otra opción a las 2 respuestas ya muy buenas.

+0

Bonito artículo detallado sobre cómo usar el asistente de SQL Developer para preparar el script y el archivo de control de SQL Loader: http://www.thatjeffsmith.com/archive/2012/08/using-oracle-sql-developer-to-setup-sqlloader-runs / – Vadzim

3

¡Alguien me pidió que posteara un enlace al the framework! que presenté en Open World 2012. Esta es la publicación completa del blog que demuestra cómo diseñar una solución con tablas externas.

4

SQL Loader es el camino a seguir. Cargué recientemente mi tabla desde un archivo csv, nuevo en este concepto, me gustaría compartir un ejemplo.

LOAD DATA 
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv' 
    REPLACE 
    INTO TABLE LOAN_BALANCE_MASTER_INT 
    fields terminated by ',' optionally enclosed by '"' 
    (
    ACCOUNT_NO, 
    CUSTOMER_NAME, 
    LIMIT, 
    REGION 

    ) 

Coloque el archivo csv control y en el mismo lugar en el servidor. Localice el exe sqlldr y utilícelo./ Passwd de control

sqlldr identificador de usuario @ NombreDB = Ex: Control ora sqlldr ABC/XYZ @ = load.ctl

espero que ayude.

0

De Oracle 18c podría utilizar Inline External Tables:

Inline tablas externas permiten la definición de tiempo de ejecución de una tabla externa como parte de una instrucción SQL, sin crear la tabla externa objeto como persistente en el diccionario de datos.

Con tablas externas en línea, la misma sintaxis que se utiliza para crear una tabla externa con una instrucción CREATE TABLE se puede utilizar en una instrucción SELECT en tiempo de ejecución. Especifique tablas externas en línea en la cláusula FROM de un bloque de consulta. Las consultas que incluyen tablas externas en línea también pueden incluir tablas regulares para combinaciones, agregación, etc.

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold) 
SELECT time_id, prod_id, quantity_sold, amount_sold 
FROM EXTERNAL ( 
    (time_id  DATE NOT NULL,  
    prod_id  INTEGER NOT NULL, 
    quantity_sold NUMBER(10,2), 
    amount_sold NUMBER(10,2))  
    TYPE ORACLE_LOADER  
    DEFAULT DIRECTORY data_dir1 
    ACCESS PARAMETERS (
     RECORDS DELIMITED BY NEWLINE 
     FIELDS TERMINATED BY '|')  
    LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external; 
Cuestiones relacionadas