Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да заредя плосък файл с динамични колони с различен тип данни в база данни на oracle?

Една от опциите е да използвате SQLLoader за зареждане на файлове в таблици.

Да кажем, че сме създали три таблици:

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

Предполагам, че файлът винаги има записи само в един формат (един от 3 възможни формата).
В такъв случай можете да създадете 3 различни контролни файла за всеки формат:

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 )

След това създайте прост скрипт, който открива формат на файла и качва данни с помощта на подходящ контролен файл - това е пример за среда на 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

В този ред:

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

test/[email protected] е потребител на база данни test с парола 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. Семантика на съхранени процедури/функции на Oracle в транзакционен контекст

  2. 11 начина за намиране на дублиращи се редове, които имат първичен ключ в Oracle

  3. Грешка (5,3):PLS-00103:Срещна се символът BEGIN, когато се очаква едно от следните:език

  4. Размяна на стойности на колони в Oracle

  5. когато вмъкнете персийски символ в oracle db, виждам въпросителния знак