CASE3

1. SQL文件

[oracle@node3 ulcase]$ cat ulcase3.sql

SQL*Loader之CASE3
set termout off

rem Do not clean up table because this example shows appending to existing
rem rows in table that also has new columns.

rem host write sys$output "Adding columns to emp.  Please wait."

alter table emp add (projno number, loadseq number);

exit
                                    
SQL*Loader之CASE3

2. 控制文件

[oracle@node3 ulcase]$ cat ulcase3.ctl

SQL*Loader之CASE3
-- NAME
-- ulcase3.ctl - SQL*Loader Case Study 3: Loading a Delimited,
-- Free-format File
--
-- DESCRIPTION
-- This case study demonstrates the following:
-- Loading data (enclosed and terminated) in stream format.
--
-- Loading dates using the DATE datatype.
--
-- Using SEQUENCE numbers to generate unique keys for loaded data.
--
-- Using APPEND to indicate that the table need not be empty before
-- inserting new records.
--
-- Using comments in the control file set off by two hyphens.
--
-- NOTES ABOUT THIS CONTROL FILE
-- This control file loads the same table as in case 2, but it
-- loads three additional columns (hiredate, projno, and loadseq).
-- The projno and loadseq columns are added to the emp table when
-- you run the ulcase3.sql script.
--
-- INFILE * specifies that the data is found at the end of the
-- control file.
--
-- APPEND specifies that the data can be loaded even if the table
-- already contains rows. That is, the table need not be empty.
--
-- The default terminator for the data fields is a comma, and some
-- fields may be enclosed by double quotation marks (").
--
-- The data to be loaded into column hiredate appears in the format
-- DD-Month-YYYY. The length of the date field is specified to have
-- a maximum of 20. The maximum length is in bytes, with default
-- byte-length semantics. If character-length semantics were used
-- instead, the length would be in characters. If a length is not
-- specified, then the length depends on the length of the date mask.
--
-- The SEQUENCE function generates a unique value in the column loadseq.
-- This function finds the current maximum value in column loadseq and
-- adds the increment (1) to it to obtain the value for loadseq for
-- each row inserted.
--
-- BEGINDATA specifies the end of the control information and the
-- beginning of the data.
--
-- Although each physical record equals one logical record, the fields
-- vary in length, so that some records are longer than others. Note
-- also that several rows have null values for comm.

LOAD DATA
INFILE *
APPEND

INTO TABLE EMP
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'     
(empno, ename, job, mgr,
 hiredate DATE(20) "DD-Month-YYYY",
 sal, comm,
 deptno   CHAR TERMINATED BY ':',
 projno,
 loadseq  SEQUENCE(MAX,1) )

BEGINDATA
7782, "Clark", "Manager", 7839, 09-June-1981, 2572.50,, 10:101
7839, "King", "President", , 17-November-1981, 5500.00,, 10:102
7934, "Miller", "Clerk", 7782, 23-January-1982, 920.00,, 10:102
7566, "Jones", "Manager", 7839, 02-April-1981, 3123.75,, 20:101
7499, "Allen", "Salesman", 7698, 20-February-1981, 1600.00, 300.00, 30:103
7654, "Martin", "Salesman", 7698, 28-September-1981, 1312.50, 1400.00, 30:103
7658, "Chan", "Analyst", 7566, 03-May-1982, 3450,, 20:101
                                       
SQL*Loader之CASE3

执行后结果:

[oracle@node3 ulcase]$ sqlplus scott/tiger @ulcase3.sql

[oracle@node3 ulcase]$ sqlldr userid=scott/tiger control=ulcase3.ctl

SQL*Loader之CASE3
SQL> select * from emp;

EMPNO ENAME  JOB         MGR    HIREDATE       SAL     COMM   DEPTNO PROJNO    LOADSEQ
----- ------ ---------  -----   ---------      ------- -----  ------ ------ ----------
 7782 Clark  Manager     7839   09-JUN-81      2573            10    101        1

 7839 King   President          17-NOV-81      5500            10    102        2

 7934 Miller Clerk       7782   23-JAN-82       920            10    102        3

 7566 Jones  Manager     7839   02-APR-81      3124            20    101        4 

7499 Allen Salesman 7698 20-FEB-81 1600 300 30 103 5 7654 Martin Salesman 7698 28-SEP-81 1313 1400 30 103 6 7658 Chan Analyst 7566 03-MAY-82 3450 20 101 7 7 rows selected.
SQL*Loader之CASE3

 总结:在本例中,

      1> APPEND指定该操作是追加,在一般情况下,要求导入数据的表是空表,如果该表已经存在数据,则需要指明下面参数中的任意一个:APPEND,REPLACE,TRUNCATE.

      2> The data to be loaded into column hiredate appears in the format DD-Month-YYYY. The length of the date field is specified to have a maximum of 20.

      3> SEQUENCE(MAX,1)产生序列,每次都在该列最大值上加1.

相关文章: