SQL LOADER SQL LOADER utility is used to load data from other data source into Oracle.

For example, if you have a table in FOXPRO, ACCESS or SYBASE or any other third party database, you can use SQL Loader to load the data into Oracle Tables. SQL Loader will only read the data from Flat files. So If you want to load the data from Foxpro or any other database, you have to first convert that data into Delimited Format flat file or Fixed length format flat file, and then use SQL loader to load the data into Oracle. Following is procedure to load the data from Third Party Database into Oracle using SQL Loader. 1. Convert the Data into Flat file using third party database command. 2. Create the Table Structure in Oracle Database using appropriate datatypes 3. Write a Control File, describing how to interpret the flat file and options to load the data. 4. Execute SQL Loader utility specifying the control file in the command line argument To understand it better let us see the following case study.
CASE STUDY (Loading Data from MS-ACCESS to Oracle)

Suppose you have a table in MS-ACCESS by name EMP, running under Windows O/S, with the following structure EMPNO NAME SAL JDATE INTEGER TEXT(50) CURRENCY DATE

This table contains some 10,000 rows. Now you want to load the data from this table into an Oracle Table. Oracle Database is running in LINUX O/S.
Solution Steps

Start MS-Access and convert the table into comma delimited flat (popularly known as csv) , by clicking on File/Save As menu. Let the delimited file name be emp.csv

Now come the Linux Machine and create a table in Oracle with the same structure as in MS-ACCESS by taking appropriate datatypes. Supply a valid username and password of Oracle User in Linux For example:C:###BOT_TEXT###gt;ftp 200.csv File transferred in 0. FTP>put Local file:C:###BOT_TEXT###gt;emp. Now after the file is transferred quit the FTP utility by typing bye command.29 Seconds FTP> d. FTP>bye Good-Bye 2. FTP will then prompt you for username and password to connect to the Linux Server. Go to Command Prompt in windows b. Now transfer this file to Linux Server using FTP command a. For example.csv remote-file:/u01/oracle/emp. At the command prompt type FTP followed by IP address of the server running Oracle.100. create a table like this $sqlplus scott/tiger SQL>CREATE TABLE emp (empno number(5).200. Now give PUT command to transfer file from current Windows machine to Linux machine. .111 Name: oracle Password:oracle FTP> c.1.

3. After creating the table. If you specify. then records which do not meet a WHEN condition will be written to this file. Now let us write a controlfile for our case study $vi emp. You can use any of the following loading option 1. If you specify.” OPTIONALLY ENCLOSED BY „”‟ TRAILING NULLCOLS (empno. The INFILE option specifies where the input file is located Specifying BADFILE is optional. INSERT : Loads rows only if the target table is empty . 2.2). You can use any text editor to write the control file.name. 5.bad‟ „/u01/oracle/emp.jdate date „mm/dd/yyyy‟) Notes: (Do not write the line numbers. they are meant for explanation purpose) 1.dsc‟ INSERT INTO TABLE emp FIELDS TERMINATED BY “. sal number(10. you have to write a control file describing the actions which SQL Loader should do.name varchar2(50). jdate date).csv‟ „/u01/oracle/emp. The LOAD DATA statement is required at the beginning of the control file. 3.ctl 1 2 3 4 5 6 7 LOAD DATA INFILE BADFILE DISCARDFILE „/u01/oracle/emp.sal. Specifying DISCARDFILE is optional. 4. then bad records found during loading will be stored in this file.

00 3123. TRAILING NULLCOLS means if the last column is null then treat this as null value. TRUNCATE: First truncates the table and then load rows. APPEND: Load rows if the target table is empty or not.ctl log=emp.e.50 10 10 10 20 300. SQL LOADER will treat the record as bad if the last column is null. Since in our case the fields are separated by “. You can replace this by any char which is used to terminate fields. The log file contains all actions which SQL loader has performed i. 3. load rows. call SQL Loader utility by typing the following command $sqlldr userid=scott/tiger control=emp. 4. how many rows were loaded.” so we have specified “. This line indicates how the fields are separated in input file. You have to view this file for any errors encountered while running SQLLoader.”. colon “:”. REPLACE: First deletes all the rows in the existing table and then.2.75 1600.00 30 .00 30 1400. In this line specify the columns of the target table. how many were rejected and how much time is taken to load the rows and etc. otherwise.00 1312. The LOG option of sqlldr specifies where the log file of this sql loader session should be created. and wants to load this data into an Oracle table. as shown below. 7.log After you have executed the above command SQL Loader will shows you the output describing how many rows it has loaded.” as the terminating char for fields. CASE STUDY (Loading Data from Fixed Length file into Oracle) Suppose we have a fixed length format file containing employees data. After you have wrote the control file save it and then. Note how do you specify format for Date columns 4. Some of the popularly use terminating characters are semicolon “.50 5500.00 920. 6. 7782 CLARK 7839 KING 7934 MILLER 7566 JONES 7499 ALLEN 7654 MARTIN MANAGER PRESIDENT CLERK MANAGER SALESMAN SALESMAN 7782 7839 7698 7698 7839 2572. pipe “|” etc.

After creating the table. employee number is from 1 st position to 4th position.2). employee name is from 6th position to 15th position.00 30 SOLUTION: Steps :- 1. for example in our fixed length file.50 20 1400. 3. SQL> CREATE TABLE emp (empno name VARCHAR2(20). Job name is from 17th position to 25th position. First Open the file in a text editor and count the length of fields. by any name.ctl 1) LOAD DATA . NUMBER(5). deptno NUMBER(3) ). now write a control file by using any text editor $vi empfix. but should match columns specified in fixed length file. NUMBER(5). 2.7658 CHAN 7654 MARTIN ANALYST SALESMAN 7566 7698 3450. job mgr sal VARCHAR2(10).00 1312. Similarly other columns are also located. In our case give the following command to create the table. Create a table in Oracle. comm NUMBER(10.2). NUMBER(10.

Note that the set of column specifications is enclosed in parentheses. CHAR. job. The INTO TABLE statement is required to identify the table to be loaded into. 2. .dat' INTO TABLE emp POSITION(01:04) POSITION(06:15) POSITION(17:25) POSITION(27:30) POSITION(32:39) POSITION(41:48) POSITION(50:51) INTEGER CHAR. DECIMAL EXTERNAL) identify the datatype of data fields in the file. name. sal EXTERNAL. 3. 5. The name of the file containing data follows the INFILE parameter. 5) deptno EXTERNAL) Notes: (Do not write the line numbers. INTEGER DECIMAL DECIMAL INTEGER 4) (empno EXTERNAL. Lines 4 and 5 identify a column name and the location of the data in the datafile to be loaded into that column. they are meant for explanation purpose) 1. empno. not of corresponding columns in the emp table. CHAR. The LOAD DATA statement is required at the beginning of the control file. and so on are names of columns in table emp. The datatypes (INTEGER EXTERNAL. 4. comm EXTERNAL. name job mgr EXTERNAL.2) 3) INFILE '/u01/oracle/fix.

00 30 1400. $sqlldr userid=scott/tiger control=empfix. Then.50 10 10 10 20 300.00 30 Now we want to load all the employees whose deptno is 10 into emp1 table and those employees whose deptno is not equal to 10 in emp2 table.00 30 20 1400. suppose we have a fixed length file as shown below 7782 CLARK 7839 KING 7934 MILLER 7566 JONES 7499 ALLEN 7654 MARTIN 7658 CHAN 7654 MARTIN MANAGER PRESIDENT CLERK MANAGER SALESMAN SALESMAN ANALYST SALESMAN 7782 7839 7698 7698 7566 7698 7839 2572.00 920.ctl .log direct=y After you have executed the above command SQL Loader will shows you the output describing how many rows it has loaded.50 3450. For example.ctl log=empfix.00 3123.00 1312. To do this first create the tablesemp1 and emp2 by taking appropriate columns and datatypes. You can also use WHEN condition to load only specified rows which meets a particular condition (only equal to “=” and not equal to “<>” conditions are allowed).4. Loading Data into Multiple Tables using WHEN condition You can simultaneously load data into multiple tables in the same session.75 1600. write a control file as shown below $vi emp_multi. After saving the control file now start SQL Loader utility by typing the following command.00 1312.50 5500.

CHAR.ctl Conventional Path Load and Direct Path Load. INTEGER EXTERNAL) INTO TABLE scott. INTEGER EXTERNAL. CHAR.emp1 WHEN (deptno=‟10 „) (empno POSITION(01:04) name job mgr sal comm deptno POSITION(06:15) POSITION(17:25) POSITION(27:30) POSITION(32:39) POSITION(41:48) POSITION(50:51) INTEGER EXTERNAL. DECIMAL EXTERNAL.emp2 WHEN (deptno<>‟10 „) (empno POSITION(01:04) name job mgr sal comm deptno POSITION(06:15) POSITION(17:25) POSITION(27:30) POSITION(32:39) POSITION(41:48) POSITION(50:51) INTEGER EXTERNAL. INTEGER EXTERNAL. DECIMAL EXTERNAL. SQL Loader can load the data into Oracle database using Conventional Path method or Direct Path method. CHAR. DECIMAL EXTERNAL.Load Data infile „/u01/oracle/empfix. DECIMAL EXTERNAL.ctl run sqlldr $sqlldr userid=scott/tiger control=emp_multi. You can specify the method by using DIRECT command line .dat‟ append into table scott. CHAR. INTEGER EXTERNAL) After saving the file emp_multi.

Loading a parent table together with a child Table Loading BFILE columns . so no reads are needed to find them.   Restrictions on Using Direct Path Loads The following conditions must be satisfied for you to use the direct path load method:     Tables are not clustered. If you give DIRECT=TRUE then SQL loader will use Direct Path Loading otherwise. passed to Oracle. Tables to be loaded do not have any active transactions pending. therefore. it competes equally with all other processes for buffer resources. into fresh blocks beyond High Water Mark. Instead it directly writes the rows. During a direct path load. Direct Path load is very fast because    Partial blocks are not used. Direct Path In Direct Path Loading. processes perform their own write I/O. if omit this option or specify DIRECT=false. This minimizes contention with other Oracle users. Although appropriate during normal use.option. This can slow the load significantly. this can slow bulk loads dramatically. instead of using Oracle's buffer cache. A conventional path load calls Oracle once for each array of rows to process a SQL INSERT statement. and fewer writes are performed. then SQL Loader will use Conventional Path loading method. the processing load on the Oracle database is reduced.e. The Oracle database looks for partially filled blocks and attempts to fill them on each insert. Oracle will not use SQL INSERT statement for loading rows. Extra overhead is added as SQL statements are generated. in datafiles i. When SQL*Loader performs a conventional path load. Conventional Path Conventional path load (the default) uses the SQL INSERT statement and a bind array buffer to load data into database tables. A direct path load calls on Oracle to lock tables and indexes at the start of the load and releases them when the load is finished. and executed. it does not scan for free blocks before high water mark. SQL*Loader need not execute any SQL INSERT statements. A direct path load uses multiblock asynchronous I/O for writes to the database files.