SQL Loader: multiple infiles, change constant
Hi,
I looked on the internet, in my SQL Loader book, and on these forums and can't find an answer to a question I have.
I have multiple infiles that are being loaded to 1 table. That's easy. The problem is that with each different infile, I have a constant that is being uploaded that changes.
Example:
infile one: load to table: constant in field list is 1
infile two: load to same table as infile one: constant in field list is 2
Any suggestions? I don't want to have to create multiple ctl files.
Thanks,
Vic
No, not in the input file itself. However, the files should be named in the format:
test1.csv
test2.csv
test3.csv.
Vic
Similar Messages
-
How can I load multiple input files ( monthwise 200601 to 200907) using sqlloader and a batchfile into tables like xxxx200601 etc
any suggestions are welcome,
thanks in advance
Edited by: sunnysmiles on Jul 10, 2009 2:14 PMsunnysmiles wrote:
How can I load multiple input files ( monthwise 200601 to 200907) using sqlloader and a batchfile
LOAD DATA
INFILE mon200601.dat
INFILE mon200602.dat
INFILE mon200603.dat
INFILE mon200604.dat
INFILE mon200605.dat
INFILE mon200606.dat
INFILE mon200607.dat
APPEND
INTO TABLE emp
( empno POSITION(1:4) INTEGER EXTERNAL,
ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL
any suggestions are welcome,[loading data from multiple files|http://www.orafaq.com/wiki/SQL*Loader_FAQ#Can_one_load_data_from_multiple_files.2F_into_multiple_tables_at_once.3F], [official documentation|http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_concepts.htm#i1004677]
thanks in advance -
SQL Loader: Multiple data files to Multiple Tables
How do you create one control file that refrences multiple data file and each file loads data in a different table.
Eg.
DataFile1 --> Table 1
DataFile2 --> Table 2
Contents and Structure of both data files are different. Data file is comma seperated.
Below example is for 1 data file to 1 table. Need to modify this or create a wrapper that would call multiple control files.
OPTIONS (SKIP=1)
LOAD DATA
INFILE DataFile1
BADFILE DataFile1_bad.txt'
DISCARDFILE DataFile1_dsc.txt'
REPLACE
INTO TABLE Table1
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
Col1,
Col2,
Col3,
create_dttm sysdate,
MySeq "myseq.nextval"
Welcome any other suggestions.I was thinking if there is a way to indicate what file goes with what table (structure) in one control file.
Example ( This does not work but wondering if something similar is allowed..)
OPTIONS (SKIP=1)
LOAD DATA
INFILE DataFile1
BADFILE DataFile1_bad.txt'
DISCARDFILE DataFile1_dsc.txt'
REPLACE
INTO TABLE Table1
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
Col1,
Col2,
Col3,
create_dttm sysdate,
MySeq "myseq.nextval"
INFILE DataFile2
BADFILE DataFile2_bad.txt'
DISCARDFILE DataFile2_dsc.txt'
REPLACE
INTO TABLE "T2"
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
T2Col1,
T2Col2,
T2Col3
) -
SQL Loader versus External Table
If anyone has worked on external tables please let me know your views.
user637544 wrote:
for sqlldr i follow the following approach
1. truncate table
2. call sqlldr and load records in staging table
3. check for bad records
how do i tuncate, call external table and check bad records for external table.As part of the SQL*Loader control file you can tell it to truncate the table as part of the process before it loads in the data.
The key differences between SQL*Loader and External Tables are:
1. SQL*Loader is an external utility run from the o/s command line, whereas External tables are usable from within SQL and PL/SQL.
2. SQL*Loader can only load data up into the database, whereas External tables can allow you to read files and write files (10g onwards)
3. SQL*Loader has limited control on skipping rows etc. whereas External tables can be queried using SQL and has all the flexibility that SQL can offer.
4. SQL*Loader requires connection information to the database, whereas External tables are already part of the database
5. SQL*Loader can only change the source filename through dynamic o/s level scripts, whereas External tables can have the filename changed using an ALTER TABLE ... LOCATION ... command.
If you want to truncate your staging table before loading it with data from the external table, then you will just have to do that as a seperate step, because the external table is not associated with other tables. Simply truncate the other table and then query the data from the external table into the staging table.
External tables offer a lot more flexibility than using SQL*Loader. -
SQL Loader direct path loads and unusable indexes
sorry about all the questions. I am researching several issues. I am reading the Utilities document. It says that in certain circumstances indexes will become unusable. I have some questions about my scenario.
1. tables partitioned by range
2. local indexes
3. all tables have 1 primary key and other indexes are non-unique
4. all sql loads will go into the most recent partition
5. users will be querying tables while sql loader is occurring
6. only one sql loader session will run per table
7. no foreign keys, triggers, or other constrants other than primary keys.
The docs are not clear. Do I have a concern about unusable indexes with direct path loads? Will indexes function while the sql loader direct path is occurring(this I can't test since I have small data files now and they load fast, but I will have larger ones in production).
My understanding is that Extertnal tables using Insert append is exactly the same as sql loader direct path load. Is this true?if you dont have anything productive to say how about you don't post at all? you have made ignorant posts like this for years.
as far as reading the docs what do you think "the docs are not clear" means? By the docs I am referring to the utilities document.
As far as version number its 10.2 and I forgot that. However, it does not appear that sql loader has really changed all that much over the last few versions.
Finally I plan on testing it out and its more than a 2 minute test. I wanted to make sure I don't miss anythng in my tests.
don't respond to any threads or posts I make from now on. -
10G data pumps / sql loader
When data is moved by data pumps / sql loader,
is the change enter into redo ?
Thanks ericWhere can I find Oracle client for 10g (or earlier)? Look at the upper left corner of this page (there is red image "Download Oracle Software")...
Is SQL*Loader part of Oracle client? Yes it is. -
Loading multiple files with SQL Loader
Hello.
I will appreciate your recommendation about the way to load multiple files (to multiple tables) using SQL Loader with only one Control file.
file1 to load to Table1, file2 to load to Table2 etc.
How the Control file should look like?
I was looking on Web, but didn't find exactly what I need.
Thanks!Ctl File : myctl.ctl
---------- Start ---------
LOAD DATA
INFILE 'F:\sqlldr\abc1.dat'
INFILE 'F:\sqlldr\abc2.dat'
INTO TABLE hdfc1
(TRANS_DATE CHAR,
NARRATION CHAR,
VALUE_DATE CHAR,
DEBIT_AMOUNT INTEGER,
CREDIT_AMOUNT INTEGER,
CHQ_REF_NUMBER CHAR,
CLOSING_BALANCE CHAR)
INTO TABLE hdfc2
(TRANS_DATE CHAR,
NARRATION CHAR,
VALUE_DATE CHAR,
DEBIT_AMOUNT INTEGER,
CREDIT_AMOUNT INTEGER,
CHQ_REF_NUMBER CHAR,
CLOSING_BALANCE CHAR)
-----------End-----------
Sqlldr Command
sqlldr scott/tiger@dbtalk control=F:\sqlldr\myctl.ctl log=F:\sqlldr\ddl_file1.txt
Regards,
Abu -
SQL LOADER / INFILE filename as variable in .ctl file
I stumbled over several threads in the OTN-forums regarding this problem, but neither was it finaly solved nor did I find a FAQ that answered my question. Soooo:
We get several datafiles from several sources and process them via SQL Loader and store 'em in the DB.
This is done via a CHRON job and a PERL skript, for all datafiles in a specific directory.
We need the information which file on which date generated the data INSIDE the DB as well.
So I want to store the filename || SYSDATE combination as well.
I know, I could parse the .ctl file and replace a key-string with the actual filename and so have it in the input.
But this seems a bit dirty to me. Isn't there some way, i.e. a keyword or variable for the infile-filename within the SQLLoader that I can access in the .ctl file? Something like:
INTO TABLE processed_files
FIELDS TERMINATED BY ';'
WHEN LOWER(LTRIM(RTRIM(hdr_ftr))) = 'ftr' -- FOOTER??
(hdr_ftr VARCHAR2(100),
source INFILE||' on '||TO_CHAR(SYSDATE, 'MM/DD/YYYY'),
realm VARCHAR2(100),
version VARCHAR2(20)
I would be greatfull if you?d share your wisdom with me. ;-))
OliverI passed this quite similar to 'Ask Tom' and got the advice to put the .ctl's content as a string variable into a Shell skript.
This shell skript (which had to be written anyway to loop over the datafiles an subsequently call the sqlldr) should then replace the INFILE parameter and the CONSTANTs for the filenames and generate a 'temporarry' .ctl before calling sqlldr!
That's it, no better and safer way! -
Load multiple records in 1 table from 1 line in text file w/sql loader
hi guys,
quick question, perhaps someone can help. searched around and didn't see this question asked before, and can't find any answer in SQL Loader faqs or docs.
i know i can extract multiple logical records from a single physical record in the input file as two logical records, and then use two into tables clauses to load the data into the table. see oracle 9i sql loader control file reference chapter 5 to see what i am talking about.
but my question follows:
cust_id amount1_val amount1_qual amount2_val amount2_qual amount3_val amount3_qual
123 1500.35 TA 230.34 VZ 3045.50 TW
basically i want to use one sql loader statement to load these 3 records into 1 table. the issue for me is that i need to re-use the cust_id for all 3 records as the key, along with the qualifier code. the example in the Oracle docs only works for data where the logical records are completely separate -- no shared column values.
i'm sure this is possible, perhaps using some :cust_id type parameter for the 2nd and 3rd records, or something, but i just don't have enough knowledge/experience with sql loader to know what to do. appreciate any help.
wayneHi wayne,
I found an example on what exactly you were looking for from an SQL*Loader documentation. Please see if it of some help to you
EXAMPLE
The control file is ULCASE5.CTL.
1234 BAKER 10 9999 101
1234 JOKER 10 9999 777
2664 YOUNG 20 2893 425
5321 OTOOLE 10 9999 321
2134 FARMER 20 4555 236
2414 LITTLE 20 5634 236
6542 LEE 10 4532 102
2849 EDDS xx 4555
4532 PERKINS 10 9999 40
1244 HUNT 11 3452 665
123 DOOLITTLE 12 9940
1453 MACDONALD 25 5532
In the above datafile
Column1 - Empno
Column2 - ENAME
Column3 - Depno.
Column4 - MGR
Column5 - Proj no.
-- Loads EMP records from first 23 characters
-- Creates and loads PROJ records for each PROJNO listed
-- for each employee
LOAD DATA
INFILE 'ulcase5.dat'
BADFILE 'ulcase5.bad'
DISCARDFILE 'ulcase5.dsc'
1) REPLACE
2) INTO TABLE emp
(empno POSITION(1:4) INTEGER EXTERNAL,
ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL)
2) INTO TABLE proj
(empno POSITION(1:4) INTEGER EXTERNAL,
3) projno POSITION(25:27) INTEGER EXTERNAL) -- 1st proj
Notes:
REPLACE specifies that if there is data in the tables to be loaded (EMP and PROJ), SQL*loader should delete the data before loading new rows.
Multiple INTO clauses load two tables, EMP and PROJ. The same set of records is processed three times, using different combinations of columns each time to load table PROJ.
Regards,
Murali Mohan -
Using constant values in SQL Loader control file
Hi,
I have a requirement where I need to migrate the data of 6 tables from MS Access into Oracle data base. I have written SQL Loader scripts so that I can create CSV files based on MS Access data and then migrate into Oracle. But in Oracle tables we have 4 common columns like Create_By, Created_Date,Updated_By and Update_Date, and those fields should be taken care by system. So, basically system should update login user ID and sysdate values in respective columns. My question here is, I do not have above mentioned common columns in MS Access tables. So, can I hard code those values in control file by saying
Created_By CONSTANT user,
Create_Date CONSTANT TO_CHAR(SYSDATE,'MM/DD/YYYY HH24:MI:SS'),
Updated_By CONSTANT user,
Updated_Date CONSTANT TO_CHAR(SYSDATE,'MM/DD/YYYY HH24:MI:SS')
Please let me know your valuable suggestions.You do it without it constant
--sample data file
1,2,,
3,4,,
LOAD DATA
INFILE 'D:\d.csv'
INTO TABLE ABC
FIELDS TERMINATED BY ","
( A,
B,
C sysdate,
D "USER"
)Edited by: J99 on Jul 23, 2009 12:14 PM
OR use to avoid extra ',' in datafile.
--sample data file
1,2
3,4
LOAD DATA
INFILE 'D:\d.csv'
INTO TABLE ABC
FIELDS TERMINATED BY "," TRAILING NULLCOLS
( A,
B,
C sysdate,
D "USER"
) -
SQL Loader - Load multiple files in UNIX
HI all, I'm looking for a bit of help with using SQL LOADER to load multiple files into one table. I've had a look on the forums but still struggling with this one.
What I want to do is basically upload everything thats in /home/ib. I know you can use INFILE for several files in the control file but I have several hundred files to upload so this isn't practical. Can I pass the directory name as an INFILE parameter?
Any help would be appreciated.On Unix you shouldn't worry about that. See this example :
[ora102 work db102]$ cat test11.dat
aaaaa,bbbbb
ccccc,ddddd
eeeee,fffff
[ora102 work db102]$ cat test12.dat
ggggg,hhhhh
jjjjj,kkkkk
lllll,mmmmm
[ora102 work db102]$ cat test13.dat
nnnnn,ooooo
ppppp,qqqqq
rrrrr,sssss
[ora102 work db102]$ cat load.sh
CTL=load.ctl
echo "load data" > $CTL
for DAT in test1*.dat
do
echo "INFILE "$DAT >> $CTL
done
echo "replace" >> $CTL
echo "INTO TABLE test1" >> $CTL
echo "fields terminated by ','" >> $CTL
echo "trailing nullcols" >> $CTL
echo "( a, b )" >> $CTL
sqlldr test/test control=load.ctl
[ora102 work db102]$ ./load.sh
SQL*Loader: Release 10.2.0.1.0 - Production on Mon Oct 2 11:45:44 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 3
Commit point reached - logical record count 6
Commit point reached - logical record count 9
[ora102 work db102]$ sqlplus test/test
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Oct 2 11:45:49 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
TEST@db102 SQL> select * from test1 order by a,b;
A B
aaaaa bbbbb
ccccc ddddd
eeeee fffff
ggggg hhhhh
jjjjj kkkkk
lllll mmmmm
nnnnn ooooo
ppppp qqqqq
rrrrr sssss
9 rows selected.
TEST@db102 SQL> -
Sql Loader INFILE name value in table column Value
Hi,
Here is my Sql Loader Script
LOAD DATA
infile '%1'
APPEND INTO TABLE XX_SUPPLIER_UPD
FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
ACTION Char
,ADDRESS_TYPE Char
,REGION Char "LTRIM(RTRIM(:REGION))"
,PO_BOX Char
,,WWW_ADDRESS Char
,status Char "NVL(:status,'X')"
,filename Char "replace(:infile,'\"','')"
I am getting the infile name as the parameter and i want to insert that parameter value in the column name fillename. Can any one guide me to how to do.
Cheers!
Jayaraj.SIf you were to use external tables instead of SQL*Loader, you can dynamically change the location of the external table (i.e. the filename) using a simple ALTER TABLE statement.
External tables also mean that all the control is inside the database rather than relying on external utilities and external scripts.
;) -
SQL*LOADER control file for Multiple Tables
Dear DBA's
I am loading data throgh SQL*LOADER in Oracle. I have some problem, While
Inserting data into multiple table I have created single Control file in
following way which is giving me error, Data is stored in seprate fileswith
tablename.dat, So each tables data is stored in seprate .DAT file. So Iwant to
insert data from single control file taking data from .dat multiple files into
multiple tables. Is it possible?? or some different method
Please help me as early as possiable.
Thanks & Regards
Shailesh
CREATE TABLE T1 (
L1 VARCHAR2(10),
L2 NUMBER(10),
L4 NUMBER(10),
MYDATE DATE);
CREATE TABLE T2 (
L1 VARCHAR2(10),
L2 NUMBER(10),
L3 LONG,
L4 NUMBER(10),
MYDATE DATE)
CONTROL FILE :-
UNRECOVERABLE LOAD DATA
INFILE 't2.dat'
INSERT INTO TABLE t2
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
( l1 char,l2 char,l4 char,mydate date,l3 char(2000000))
INFILE 't1.dat'
INSERT INTO TABLE t1
FIELDS TERMINATED BY ','
OPTIONALLYENCLOSED BY '"'
TRAILING NULLCOLS
( f1 char,f2 char,f4 char))
T2.DAT
Raju,14,1,09-NOV-2000,"Has a powerful data parsing,engine which putslittle
limitation on the format of the data in thedatafile."
Manu,14,2,09-NOV-2000,"Can load data from multiple datafiles, during the same
load session. "
T1.DAT
Raj,14,1,09-NOV-2000
Mau,14,2,09-NOV-2000
nullHi,
I tried to use your control file and got numerous erros.
try using seperate control files:
T1.CTL:
LOAD DATA
INFILE 'D:\T2.dat'
INSERT INTO TABLE t2
( l1 char,l2 char,l4 char,mydate date,l3 char(20000))
T2.CTL
LOAD DATA
INFILE 'D:\T1.dat'
INSERT INTO TABLE t1
( l1 char,l2 char,l4 char,mydate date) -
SQL Loader/External Table multiple record delimiters
Hi every one.
I have a strange problem, I have an external csv file which i wish to deal with (external tables or sql loader). This csv is totally not organized in structure and it contains records that are mixed together, meaning that some records are delimited by newline characters. So in short, i want to know if I will be able to load the data in this csv separating records by newline character and another character? So is that possible to have multiple record delimiters specified in the same ctl file?abohsin,
I think using the Stream record format would be helful in your case. Please explore that.
Using stream record option, instead of the default new line, you can specify a user defined record delimiter.
Check this link.
http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005509
Here is what I did. Not the complete answer, but it might be helpful.
Replace all delimiters witha standard delimiters (in unix)
sed s/HEAD,/**DLM**/g < test.dat >test2.dat
sed s/TAIL,/**DLM**/g < test2.dat >test3.dat
create table t(
TEXT varchar2(100)
and Use that delimiter as the standard delimiter.
load data
infile "test3.dat" "str '**DLM**'"
into table T
TRUNCATE
fields terminated by 'XXXXX' optionally enclosed by '"'
TEXT
sql> select * from t;
TEXT
1111,2222,
4444,5555,
4444
1111,3333,
8888,6666,
5555
{code}
You should also replace new line charecters with '***DLM***'.
Thanks,
Rajesh. -
Using sql load insert multiple fields data into a single column in database
Hi ,
I have my log file in sun OS box something like this
=======
(07/29/2009 00:02:24.467) 367518 (07/29/2009 00:02:26.214) 949384011
(07/29/2009 00:02:26.236) 3675 (07/29/2009 00:02:28.207) 949395117
(07/29/2009 00:02:28.240) 337710 (07/29/2009 00:02:30.621) 949400864
=============
I am trying to insert the data into oracle data base as follows.
=============================
column1 : (07/29/2009 00:02:24.467)
column2 : 367518
column3 : (07/29/2009 00:02:26.214)
column4 : 949384011
===========================
Can anyone help me with the control file format?
someone suggested me the code below.
==========
LOAD DATA
INFILE 'D:\work\load.txt'
INTO TABLE sample
(col1 POSITION(02:24) char,
col2 POSITION(27:32) INTEGER EXTERNAL,
col3 POSITION(35:57) CHAR,
col4 POSITION(60:68) INTEGER EXTERNAL
===========
but this works only for the fixed length data? Please helpuser11744904 wrote:
Hi ,
I have my log file in sun OS box something like this
=======
(07/29/2009 00:02:24.467) 367518 (07/29/2009 00:02:26.214) 949384011
(07/29/2009 00:02:26.236) 3675 (07/29/2009 00:02:28.207) 949395117
(07/29/2009 00:02:28.240) 337710 (07/29/2009 00:02:30.621) 949400864
=============
I am trying to insert the data into oracle data base as follows.
=============================
column1 : (07/29/2009 00:02:24.467)
column2 : 367518
column3 : (07/29/2009 00:02:26.214)
column4 : 949384011
===========================
Can anyone help me with the control file format?
someone suggested me the code below.
==========
LOAD DATA
INFILE 'D:\work\load.txt'
INTO TABLE sample
(col1 POSITION(02:24) char,
col2 POSITION(27:32) INTEGER EXTERNAL,
col3 POSITION(35:57) CHAR,
col4 POSITION(60:68) INTEGER EXTERNAL
===========
but this works only for the fixed length data? Please helpIs the requirement to load all data in a single column or multiple columns? The thread subject and body are conflicting.
Maybe you are looking for
-
Urgent!help needed!!Payment issue!!!
Last day I updated my credit cart info to make the payment and on the screen comes up a hint as follows: I updated the info for 6 times to make sure it is OK.Every time I update I receive a hint from my bank about $1,which in total is about $6 for 6
-
Document links repositioned after OCR is performed. Is there a workaround or solution?
We use Adobe Acrobat Pro 10. We receive files that have imbedded links which link various parts of the PDF file to each other. It is necessary to complete OCR on this file for future search purposes. However, we have found that performing OCR causes
-
hi!pls tell me how can I cancel the files that download,but they can not be downloaded,there maybe a. Problem.
-
Need help scripting the Essentials Server Backup configuration in PowerShell
I'm trying to write a PowerShell script that automates the setup and configuration of the Server Backup feature within WS2012 R2 Essentials. There are a number of cmdlets for defining the backup source files and target location such as add-wssbackupt
-
I am currently using Photoshop Elements 9 on one PC and would like to transfer my catalog to another PC with is faster and more powerful PC? For example, could I install Photoshop Elements 10 on the faster PC and then import the Catalog Backup from