หลักการ
SQL*Loader คือเครื่องมือหนึ่งที่ใช้ในการจัดการข้อมูลจาก source file ไปยัง Oracle โดยจะประกอบด้วยสองไฟล์ ไฟล์แรกคือ Control file เอาไว้ระบุว่าจะ
จัดการไฟล์ที่ไหน อย่างไร และ Data File ซึ่งจะเป็นไฟล์ข้อมูลที่ต้องการโหลด
การสร้าง Control File Syntax จะสร้างเป็น "ชื่อไฟล์.ctl"
LOAD DATAINFILE <dataFile>APPEND INTO TABLE <tableName>FIELDS TERMINATED BY '<separator>'(<list of all attribute names to load>)
<dataFile> เป็นชื่อไฟล์ของข้อมูล ส่วนใหญ่จะเป็นไฟล์ฟอร์แมท .txt,.dat * กรณีที่ไฟล์อยู่ต่างที่ สามารถอ้าง path เต็มได้ เช่น c:/somewhere/example.dat
<tableName> ชื่อตารางที่ต้องการบันทึกข้อมูลลง
** APPEND เพิ่มในกรณีที่ตารางไม่ว่างมีข้อมูลเก่าแล้ว แต่ถ้าตารางเปล่า ไม่ต้องมี
<separator> ระบุตัวคั่นระหว่างข้อมูล สามารถใช้สัญลักษณ์ได้ เช่น | หรือสัญลักษณ์ที่ไม่มีในข้อมูล
<list of all attribute names to load> List ของฟิวล์ที่ต้องการใส่ข้อมูลที่ตรงกันกับตาราง <tableName> และตรงกับข้อมูลของไฟล์ข้อมูล
ตัวอย่าง
LOAD DATAINFILE test.datINTO TABLE testFIELDS TERMINATED BY '|'(i, s)
ตัวอย่างการสร้างไฟล์ Data File
กรณีนี้มีสองฟิวล์ และคั่นด้วยสัญลักษณ์ | แบบ textfile ทั่วๆไป
1|foo
2|bar
3| baz
กรณีที่มีหลายฟิวล์ และคั่นด้วยสัญลักษณ์ , แบบ csv
10001,"Scott Tiger", 1000, 40
10002,"Frank Naude", 500, 20
** การเรียกการโหลดข้อมูล สามารถใช้งานบน Dos-Mode ( UNIX-level command ) หรือ sqlplus
syntax
sqlldr <yourName> control=<ctlFile> log=<logFile> bad=<badFile>
ตัวอย่าง
sqlldr username@server/password control=loader.ctl log=log.txt
เทคนิคเพิ่มเติม
กรณีรวมไฟล์ Contral กับ Data ไว้ในไฟล์เดียวกัน ใช้สัญลักษณ * เข้ามาแทนที่ ดังตัวอย่าง
LOAD DATAINFILE *INTO TABLE testFIELDS TERMINATED BY '|'(i, s)BEGINDATA1|foo2|bar3| baz
กรณีที่โหลดข้อมูลที่เป็น Date ลงตาราง
LOAD DATAINFILE *INTO TABLE fooFIELDS TERMINATED BY '|'(i, d DATE 'dd-mm-yyyy')BEGINDATA1|01-01-19902|4-1-1998
อ้างอิงเพิ่มเติม
No comments:
Post a Comment