Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak załadować płaski plik z dynamicznymi kolumnami o różnym typie danych do bazy danych Oracle?

Jedną z opcji jest użycie SQLLoadera do załadowania plików do tabel.

Powiedzmy, że utworzyliśmy trzy tabele:

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)
);

Zakładam, że plik ma zawsze zapisy tylko w jednym formacie (jeden z 3 możliwych formatów).
W takim przypadku możesz utworzyć 3 różne pliki kontrolne dla każdego formatu:

format_a.ctl

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

format_b.ctl

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

format_c.ctl

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

Następnie utwórz prosty skrypt, który wykrywa format pliku i przesyła dane za pomocą odpowiedniego pliku kontrolnego - to przykład dla środowiska 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

W tej linii:

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

test/[email protected] jest użytkownikiem bazy danych test posiadanie hasła test




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. blok plsql, aby uzyskać dynamiczny wynik zapytania sql

  2. Oracle:Connect By Loop w danych użytkownika

  3. Brak prawego nawiasu w poleceniu Utwórz tabelę SQL

  4. Usuń proste tagi HTML z ciągu w Oracle za pomocą RegExp, potrzebne wyjaśnienie

  5. Czym jest kursor w wyroczni?