तालिकाओं में फ़ाइलें लोड करने के लिए 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 )
फिर एक साधारण स्क्रिप्ट बनाएं जो फ़ाइल के प्रारूप का पता लगाती है और उपयुक्त नियंत्रण फ़ाइल का उपयोग करके डेटा अपलोड करती है - यह विंडोज़ वातावरण के लिए एक उदाहरण है:
@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
टेस्ट/[email protected]
एक डेटाबेस उपयोगकर्ता है test
पासवर्ड होना test