Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara memuat file datar dengan kolom dinamis dengan tipe data berbeda ke dalam database Oracle?

Salah satu opsi adalah menggunakan SQLLoader untuk memuat file ke dalam tabel.

Misalnya kita telah membuat tiga tabel:

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

Saya berasumsi bahwa file selalu merekam dalam satu format saja (salah satu dari 3 kemungkinan format).
Dalam kasus seperti itu, Anda dapat membuat 3 file kontrol yang berbeda untuk setiap format:

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 )

Kemudian buat skrip sederhana yang mendeteksi format file dan mengunggah data menggunakan file kontrol yang sesuai - ini adalah contoh untuk lingkungan 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

Di baris ini:

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

test/[email protected] adalah pengguna basis data test memiliki kata sandi 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. Tulis kueri untuk menemukan nama siswa yang mendapat nilai maksimum dalam Rekayasa Perangkat Lunak. Urutkan hasil berdasarkan nama

  2. Otomatiskan Pekerjaan Integrasi Data IRI dengan Oracle Job Scheduler

  3. Dapatkan BLOB dari Kolom BFILE di Oracle

  4. Pembilasan Kursor Tunggal

  5. Menginstal RAC untuk Database dengan Datafiles