sql >> Databáze >  >> RDS >> Oracle

Jak načíst plochý soubor s dynamickými sloupci s různým datovým typem do databáze Oracle?

Jednou z možností je použít SQLLoader k načtení souborů do tabulek.

Řekněme, že jsme vytvořili tři tabulky:

CREATE TABLE tableA(
  col1 int, col2 int, col3 int, col4 int 
);

CREATE TABLE tableB(
  col1 int, col2 varchar2(100), col3 int, col4 int, col5 int, col6 varchar2(100)
);

CREATE TABLE tableC(
  col1 varchar2(100), col2 date, col3 number(10,2)
);

Předpokládám, že soubor má vždy záznamy pouze v jednom formátu (jeden ze 3 možných formátů).
V takovém případě můžete pro každý formát vytvořit 3 různé kontrolní soubory:

formát_a.ctl

load data
 infile 'c:\tmp\test\file.txt'
 into table tableA
 fields terminated by "|"         
 ( col1, col2, col3, col4 )

formát_b.ctl

load data
 infile 'c:\tmp\test\file.txt'
 into table tableB
 fields terminated by "|"         
 ( col1, col2, col3, col4, col5, col6 )

formát_c.ctl

infile 'c:\tmp\test\file.txt'
 into table tableC
 fields terminated by "|"         
 ( col1 , 
   col2 date 'yyyy-mm-dd',
   col3 )

Poté vytvořte jednoduchý skript, který zjistí formát souboru a nahraje data pomocí příslušného řídicího souboru – toto je příklad pro prostředí Windows:

@echo off
set filename=file.txt
IF NOT EXIST   %filename%  GOTO error

findstr /M "\|.*\|.*\|.*\|.*\|" file.txt
IF NOT ERRORLEVEL 1 GOTO formatB

findstr /M "\|.*\|.*\|" file.txt
IF NOT ERRORLEVEL 1 GOTO formatA

findstr /M "\|.*\|" file.txt
IF NOT ERRORLEVEL 1 GOTO formatC

:error
Echo Error: file %filename% doesn't exist or doesn't match any proper format
goto end

:formatA
set ctl_file=format_a
goto import

:formatB
set ctl_file=format_b
goto import

:formatc
set ctl_file=format_c
goto import

:import
echo Import using: %ctl_file%
sqlldr test/[email protected]//192.168.2.51:1521/orcl control=%ctl_file%.ctl log=%ctl_file%.log
:end

V tomto řádku:

sqlldr test/[email protected]//192.168.2.51:1521/orcl control=%ctl_file%.ctl log=%ctl_file%.log

test/[email protected] je uživatel databáze test s heslem test




  1. Problém s formátem čísel v Oracle

  2. Formát data protokolu dotazu MySQL

  3. Jak načíst řádek v tabulce DB právě přidané v Javě

  4. Připojte se k poddotazu s doktrínou 2 DBAL