程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle文本文件導入導出(sqlldr&&spool)

oracle文本文件導入導出(sqlldr&&spool)

編輯:Oracle數據庫基礎
 

關於導出
  原理
  通過sqlplus的的報表功能生成文本文件,但產生的文本文件因分析原因存在空行現象(只有回車沒有其它),可以通過第三方方式處理一下生成標准文本
  A 學習過程
  1 建表
  
  SQL>CREATE TABLE TESTINOUT(ID NUMBER(10), USERNAME VARCHAR2(10), DATE1 DATE, MONEY NUMBER(6, 2));
  
  2 添加數據
  SQL>insert into TESTINOUT(id,username,date1,money) values(1,'will',to_date('29-12-2001','dd-mm-yyyy'),33.33)
  SQL>insert into TESTINOUT(id,username,date1,money) values(2,'ddxxkk',to_date('29-12-2002','dd-mm-yyyy'),443.33)
  SQL>insert into TESTINOUT(id,username,date1,money) values(1234567890,'thisistest',to_date('29-12-2002','dd-mm-yyyy'),4443.33)
  
  3 設定列間距為'(沒有空格)
  SQL> set colsep '
  
  4 
  SQL>column id format a10 truncate
  SQL>column money format a6 truncate
  SQL> select to_char(id,'0000000009S') as id,username,to_char(date1,'yyyymmdd') as date1,to_char(money*100,'000000s') as money from testinout;
  ID USERNAME DATE1 MONEY
  ----------------------------------
  0000000001test 20011229003333
  0000000002ddxxkk 20021229055500
  1234567890thisistest20021229444333
  
  
  B 
  測試過程
  1編寫腳本
  testinout.sql的內容如下
  
  set colsep '
  set trimspool on
  set linesize 120
  set pagesize 2000
  set newpage 1
  set heading off
  set term off
  column money format a6 truncate
  column id format a10 truncate
  spool d:\iii
  select to_char(id,'0000000009S') as id,username,to_char(date1,'yyyymmdd') as date1,to_char(money*100,'000000s') as money from testinout;
  spool off
  exit;
  
  2 執行腳本
  sqlplus user1/user1@my8i @d:\testinout.sql
  或
  sqlplus user1/user1 @d:\testinout.sql>d:\t
  
  3 d:\iii.lst的內容如下
  
  0000000001test 20011229003333
  0000000002ddxxkk 20021229055500
  1234567890thisistest20021229444333
  1234567890thisi漢字t20021229444333
  
  4
  完整的一次運行生的iii.lst的腳本 i.sql
  
  CREATE TABLE TESTINOUT(ID NUMBER(10), USERNAME VARCHAR2(10), DATE1 DATE, MONEY NUMBER(6, 2));
  insert into TESTINOUT(id,username,date1,money) values(1,'test',to_date('29-12-2001','dd-mm-yyyy'),33.33);
  insert into TESTINOUT(id,username,date1,money) values(2,'ddxxkk',to_date('29-12-2002','dd-mm-yyyy'),443.33);
  insert into TESTINOUT(id,username,date1,money) values(1234567890,'thisistest',to_date('29-12-2002','dd-mm-yyyy'),4443.33);
  set colsep '
  set trimspool on
  set linesize 120
  set pagesize 2000
  set newpage 1
  set heading off
  set term off
  column money format a6 truncate
  column id format a10 truncate
  spool d:\iii
  select to_char(id,'0000000009S') as id,username,to_char(date1,'yyyymmdd') as date1,to_char(money*100,'000000s') as money from testinout;
  spool off
  
  執行
  D:\>sqlplus user1/user1@my8i @i.sql
  
  C
  相關命令:
  
  設定列間字符
  set colsep '字符'
  
  spool寫入文件前時是否將輸出的尾隨空格刪除
  set trimspool on/off
  
  指定一個報告行的寬度(字符數。一個漢字占2位),linesize選項范圍(自1至32767)
  set linesize 行寬
  
  指定一頁中的行數,默認為24行 pagesize選項范圍(自0至50000)
  set pagesize  頁行數
  
  控制列標題打印;默認為ON
  set heading on/off
  也就是說第4步中的如下信息是否顯示
  ID USERNAME DATE1 MONEY
  ----------------------------------
  
  新頁前空行數,如果等於0,新頁第1個字符前出現換行符
  set newpage 行數
  
  輸入內容到文件
  spool off/文件名
  
  控制SQL * PLUS 是否顯示在屏幕上,默認為ON,設為OFF,則表示直接從腳本中執行
  set term off
  
  
  關於導入
  
  原理
  通過SQL * Loader(sqlldr) 將文本類型件導入到數據表,
  sqlldr通過控制文件(control='文件名') 進行相應工作
  文本文件有兩個格式
  定長記錄,每行記錄長度固定)
  test 1234 33.44
  ddxxkk 1211 123.00
  變長記錄,通過特定的分界符進行分隔(下例用逗號為分界符)
  test,1234,33.44
  ddxxkk,1211,123.00
  
  對於空行系統自行跳過
  測試
  1 編寫腳本d:\in.clt
  
  load Data
   Infile 'd:\iii.lst'
   append
  into table testinout
  (id position(01:10) integer external,
   username position(11:20) char,
   date1 position(21:28) date 'yyyymmdd',
   money position(29:34) ZONED(6,2)
  )
  
  2 執行腳本
  D:\>sqlldr user1/user1@my8i control='d:\in.ctl'
  
  3 分析結果
  程序自生成日志 d:\in.log ,可以通過sqlldr參數指定 log='文件名'
  程序自生壞數據文件 d:\iii.bad 可以通過sqlldr參數指定 bad='文件名'

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved