oracle Sql loader

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

ภาพประจำตัวสมาชิก
jataz2
PHP Hero Member
PHP Hero Member
โพสต์: 194
ลงทะเบียนเมื่อ: 22/02/2011 11:48 am

oracle Sql loader

โพสต์โดย jataz2 » 20/09/2017 5:13 pm

วิธีการ load ข้อมูลจาก *.txt หรือ *.csv เข้า table มีหลายวิธี

Sql Loader เป็น วิธีนึงที่ถ้าทำเป็นจะคลิกทีเดียว และนั่งรอชิวๆ ไม่ต้องทำอะไร รอให้ import เสร็จ

สร้างโฟลเดอร์ ไว้สักทีเช่น D:\test sql loader\ จากนั้นนำไฟล์มาวางในโฟลเดอร์ 3 ไฟล์ ดังนี้

Control.txt
FileData.txt
BatSqlLoader.bat

หน้าตาของเนื้อไฟล์มีดังนี้
1. Control.txt

options (skip=1)
load data
infile 'D:\test sql loader\FileData.txt'
into table tb_Customer
fields terminated by "|"
optionally enclosed by '"' trailing nullcols
(X FILLER
,COD_CUST_ID
,COD_CUST_NATL_ID
,FLG_IC_TYP
,FLG_CUST_TYP
,FLG_TYP_CLASS
,FLG_EMP
,COD_ACCT_NO
,CUS_SGMT_INV
,CUS_SGMT_CORP
,COD_RM_DEP)

skip=1 คือ skip แถวแรกใน FileData.txt ไม่ต้องเอาเข้า table โดยมากเป็น column header จึง skip ออกไป ถ้าเราไม่มี header ก็ใช้ skip=0
into table tb_Customer ระบุชื่อตารางที่เราต้องการ insert ข้อมูลเข้าไป ในที่นี้คือ tb_Customer
fields terminated by "|" หมายถึง ใน FileData.txt เราจะคั่นแต่ละคอลัมน์โดยใช้ |
optionally enclosed by '" หมายถึง อนุญาติให้เนื้อ data ของแต่ละคอลัมน์ มีอักขระ ' ได้
trailing nullcols เนื้อ data ของแต่ละคอลัมน์เป็น null ได้
(X FILLER คือ คอลัมน์นี้ ไม่ต้อง map เข้ากับคอลัมน์อะไรเลย บน table
,COD_CUST_ID คอลัมน์ที่ 2 ใน FileData.txt ถูก map เข้ากับ tb_Customer.COD_CUST_ID
,COD_CUST_NATL_ID คอลัมน์ที่ 3 ใน FileData.txt ถูก map เข้ากับ tb_Customer.COD_CUST_NATL_ID ทำในลักษณะนี้ไปเรื่อยๆ
,FLG_IC_TYP
,FLG_CUST_TYP
,FLG_TYP_CLASS
,FLG_EMP
,COD_ACCT_NO
,CUS_SGMT_INV
,CUS_SGMT_CORP
,COD_RM_DEP)


2. FileData.txt หน้าตาของข้อมูลในไฟล์ ที่เราต้องการ import เข้า table

H|NBCS_IF_FCR_CUST|2017-09-18T19:18:56+07:00
D|236521|3740100456375|I|L|I|N||KKM||B04904
D|236522|3640407055081|I|L|I|N||KKM||B01418
D|236523|3101571564831|I|L|I|N||KKP||B03217
D|236524|3419970745575|I|L|I|N||KKPB3||B02328
D|236525|3160670653726|I|L|I|N||KKM||B04002
D|236526|1209607117531|I|L|I|N||KKM||B03208
D|236527|1769970072946|I|L|I|N||KKM||B03802
D|236528|3171800421382|I|L|I|N||KKPB2||B00702
D|236529|1461070081031|I|L|I|N||KKM||B02501
D|236530|1339907874060|I|L|I|N||KKM||B05301
D|236531|3369970029714|I|L|I|N||KKM||B01110
D|236532|3249970079801|I|L|I|N||KKM||B08202


3. BatSqlLoader.bat

sqlldr.exe CUSTOMER/password@10.0.0.1:1570/CUSTOMERDB control='Control.txt' log='Results.log' rows=500000 SILENT=ALL errors=200000


วิธีเรียกใช้
เปิด dos comanad หน้าจอดำๆ ขึ้นมา
cd D:\test sql loader\ กด enter
D:\test sql loader>BatSqlLoader.bat แล้วกด enter ระบบก็จะทำงานตามที่เรา confiure ไว้ที่ไฟล์ control.txt จนเสร็จ

ภาพประจำตัวสมาชิก
jataz2
PHP Hero Member
PHP Hero Member
โพสต์: 194
ลงทะเบียนเมื่อ: 22/02/2011 11:48 am

Re: oracle Sql loader

โพสต์โดย jataz2 » 03/10/2017 3:24 pm

ถ้าไม่ได้ระบุ option errors จะมีค่า defalut อยู่ที่ 50
ซึ่งจะทำให้เพื่อนๆเจอปัญหาคือ มีข้อมูลใน textfile 2 แสน rows พอรันไปได้ไม่ว่าจะกี่แถวก็ตาม ถ้ามี error ครบ 50 แล้วมันจะหยุดการ import ข้อมูลเข้า database ทันที
ผมติดปัญหานี้อยู่นาน ไม่รู้ว่าทำไม จึงทดลองระบุ errors=200000 มันจึง import ข้อมูลเข้า database ทั้ง 2 แสน rows อาจมี error สัก 700 แต่ก็ทำไปได้ทั้งหมด ไม่หยุดทำงานไปซะก่อนจะครบทุก row

ภาพประจำตัวสมาชิก
jataz2
PHP Hero Member
PHP Hero Member
โพสต์: 194
ลงทะเบียนเมื่อ: 22/02/2011 11:48 am

Re: oracle Sql loader

โพสต์โดย jataz2 » 03/10/2017 3:27 pm

into table tb_Customer => เอาเข้าแบบ insert เข้าไป โดยในตาราง tb_Customer ต้องเป็นตารางเปล่าๆ ไม่มี row เลย จึงจะ run ได้
replace table tb_Customer => มนจะ auto trunate ตารางให้ก่อน จากนั้นเอาเข้าแบบ insert เข้าไป ไม่จำเป็นต้องเป็นตารางเปล่าๆ มี ข้อมูลอยุ่ในตารางได้ เพราะยังไงมันก็ truncate ก่อนอยู่แล้ว


  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 9 และ บุคคลทั่วไป 0 ท่าน