oracle使用sql文件创建表,使用SQL*Loader创建外部表之一
使用SQL*Loader創建外部表:
---創建目錄對象并授權給Scott用戶:
SQL> create or replace directory loader_home as '/home/oracle/dirhome';
Directory created.
--授權:
SQL> grant read,write on directory loader_home to scott;
Grant succeeded.
---在scott用戶下創建外部表:
SQL> conn scott/tiger
Connected.
SQL> show user
USER is "SCOTT"
--創建外部表:
SQL> create table myloader(
2 ?id number(3),
3 ?dname varchar2(12),
4 ?lname varchar2(10));
Table created.
--查看表結構:
SQL> desc myloader
Name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Null? ? ?Type
----------------------------------------- -------- ----------------------------
ID ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NUMBER(3)
DNAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(12)
LNAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(10)
---在操作系統層創建兩個存放外部數據的文件:
[oracle@enmo ~]$ cd dirhome/
[oracle@enmo dirhome]$ pwd
/home/oracle/dirhome
[oracle@enmo dirhome]$
--創建外部文件1:
[oracle@enmo dirhome]$ vi dt1.csv
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
~
--創建外部文件2:
[oracle@enmo dirhome]$ vi dt2.csv
40,OPERATIONS1,BOSTON0
50,OPERATIONS2,BOSTON9
60,OPERATIONS3,BOSTON8
70,OPERATIONS4444,BOSTON7
~
--查看創建的兩個外部文件:
[oracle@enmo dirhome]$ ls
dt1.csv ?dt2.csv
[oracle@enmo dirhome]$ ll
total 8
-rw-r--r-- 1 oracle oinstall 80 Nov ?1 22:38 dt1.csv
-rw-r--r-- 1 oracle oinstall 95 Nov ?1 22:39 dt2.csv
[oracle@enmo dirhome]$
--創建外部表控制文件:
[oracle@enmo dirhome]$
[oracle@enmo dirhome]$ vi load.ctl
load data
infile 'dt1.csv'
infile 'dt2.csv'
badfile 'load.bad' ? ? #指明壞文件
into table myloader
truncate
fields terminated by ','
(id,dname,lname)
~
--查看控制文件:
[oracle@enmo dirhome]$ ls
dt1.csv ?dt2.csv ?load.ctl
---導入外部文件到Scott用戶下的myloader表:
[oracle@enmo dirhome]$ sqlldr scott/tiger control=load.ctl
SQL*Loader: Release 11.2.0.4.0 - Production on Tue Nov 1 22:54:19 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. ?All rights reserved.
Commit point reached - logical record count 4
Commit point reached - logical record count 8
[oracle@enmo dirhome]$
--查看本目錄下的文件:
[oracle@enmo dirhome]$
[oracle@enmo dirhome]$ ls
dt1.csv ?dt2.csv ?load.bad ?load.ctl ?load.log
#多生成了一個load.bad的壞文件,是存放因為不符合導入條件的數據。
--到Scott用戶查看表myloader的數據:
SQL> select * from myloader;
ID DNAME ? ? ? ?LNAME
---------- ------------ ----------
10 ACCOUNTING ? NEW YORK
20 RESEARCH ? ? DALLAS
30 SALES ? ? ? ?CHICAGO
40 OPERATIONS ? BOSTON
40 OPERATIONS1 ?BOSTON0
50 OPERATIONS2 ?BOSTON9
60 OPERATIONS3 ?BOSTON8
7 rows selected.
#通過Scott用戶下的SQL查詢,發現 外部文件dt2.csv中的ID號為70的數據沒有被導入表myloader中。
--嘗試讀取load.bad文件的額數據:
[oracle@enmo dirhome]$
[oracle@enmo dirhome]$ cat load.bad
70,OPERATIONS4444,BOSTON7
#看到因為第二個字段的長度超出了設置的長度,所以沒有被導入到表中。
---空值null的處理:
--在Scott用戶另外創建一個表hisloader:
SQL> create table hisloader(
2 ?id number(3),
3 ?dname varchar2(12),
4 ?lname varchar2(10));
Table created.
--編輯外部文件dt3.csv以及控制文件:
[oracle@enmo dirhome]$ vi dt3.csv
101,OPERATIONS5,BOSTON1
102,OPERATIONS6,BOSTON2
103,OPERATIONS7
~
#共3條數.
--創建控制文件:
[oracle@enmo dirhome]$ vi load1.ctl
load data
infile 'dt3.csv'
badfile 'load.bad'
into table hisloader
truncate
fields terminated by ','
trailing nullcols
(id,dname,lname)
~
--利用sqlldr將外部數據導入表hisloader中:
[oracle@enmo dirhome]$ sqlldr scott/tiger control=load1.ctl
SQL*Loader: Release 11.2.0.4.0 - Production on Tue Nov 1 23:22:58 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. ?All rights reserved.
Commit point reached - logical record count 3
[oracle@enmo dirhome]$
#可到有3條數據導入表中。
--到Scott用戶查看hisloader表的數據:
SQL> select * from hisloader;
ID DNAME ? ? ? ?LNAME
---------- ------------ ----------
101 OPERATIONS5 ?BOSTON1
102 OPERATIONS6 ?BOSTON2
103 OPERATIONS7
#可以看到含有空值的數據也可以被導入到表hisloader中。
--查看目錄下的外部文件:
[oracle@enmo dirhome]$ ll
total 32
-rw-r--r-- 1 oracle oinstall ? 80 Nov ?1 22:38 dt1.csv
-rw-r--r-- 1 oracle oinstall ? 95 Nov ?1 22:39 dt2.csv
-rw-r--r-- 1 oracle oinstall ? 64 Nov ?1 23:18 dt3.csv
-rw-r--r-- 1 oracle oinstall ?136 Nov ?1 23:21 load1.ctl
-rw-r--r-- 1 oracle oinstall 1588 Nov ?1 23:22 load1.log
-rw-r--r-- 1 oracle oinstall ? 26 Nov ?1 22:54 load.bad
-rw-r--r-- 1 oracle oinstall ?134 Nov ?1 22:50 load.ctl
-rw-r--r-- 1 oracle oinstall 1852 Nov ?1 22:54 load.log
[oracle@enmo dirhome]$
對于含有控制的數據,就需要在控制文件中添加語句trailing nullcols。
總結
以上是生活随笔為你收集整理的oracle使用sql文件创建表,使用SQL*Loader创建外部表之一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骚操作,让 Twitter 员工默写代码
- 下一篇: SQLServer DBA 三十问(加强