ฉันจะยกเลิกการโหลดตารางฐานข้อมูล Oracle เป็นไฟล์ csv ได้อย่างไร


18

ฉันต้องการดึงข้อมูลบางอย่างจากฐานข้อมูล Oracle 11g รีลีส 1 และจัดให้เป็นไฟล์ CSV ตั้งแต่หนึ่งไฟล์ขึ้นไป ข้อมูลอยู่ในหลายตารางและ / หรือมุมมอง ทั้งหมดนี้ควรทำงานผ่านบรรทัดคำสั่ง อะไรจะเป็นวิธีที่ดีที่สุดในการทำสิ่งนี้?

คำตอบ:


11

อรุณ

ตอนนี้ sqlcl มีให้บริการจากOracle SQL Developer 4.1 EA2 (4.1.0.18.37) คุณสามารถใช้งานได้มากมายเช่น sqlplus เก่าและมีชื่อเสียง sqlcl มีการตั้งค่ารูปแบบเอาต์พุตสำหรับ csv

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ sqlcl checkout Kris 'blog

ก่อน sqlcl เป็นเรื่องง่ายที่สุดสำหรับสิ่งนี้คือการใช้ APEX และส่งออกรายงานไปยัง csv ใน sqlplus เก่าธรรมดาคุณสามารถทำได้โดยใช้

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

วิธีนี้ใช้ได้ผลดีที่สุดหากผลลัพธ์จะถูกเขียนลงบนแอพพลิเคชันเซิร์ฟเวอร์หรือไคลเอนต์ หากต้องเขียนบนเซิร์ฟเวอร์ฐานข้อมูล utl_file อาจเป็นตัวเลือกที่ดีกว่า

โรนัลด์


8

คุณควรดูแพ็คเกจUTL_FILEในตัว มีหลายวิธีที่คุณสามารถใช้ได้

  1. คุณสามารถเขียนโพรซีเดอร์จำนวนเท่าใดก็ได้ในแพ็คเกจที่ใช้แพ็คเกจ UTL_FILE เพื่อเขียนไปยังไฟล์จำนวนเท่าใดก็ได้ สามารถเรียกขั้นตอนเหล่านี้ได้จากเกือบทุกแอปพลิเคชันรวมถึง SQL * Plus

  2. คุณสามารถเขียนสคริปต์ PL / SQL เพื่อทำงานเดียวกันและเรียกใช้สคริปต์จากบรรทัดคำสั่ง SQL * Plus โดยระบุ @scriptname บนบรรทัดคำสั่ง

  3. คุณสามารถวางบล็อกโดยใช้ UTL_FILE โดยตรงลงใน SQL * Plus แต่ควรใช้สำหรับการส่งออกเพียงครั้งเดียวเท่านั้นและแม้ว่ามันจะไม่ใช่เส้นทางที่ดีที่สุด

ในที่ง่ายส่งออกไฟล์ของตนโดยใช้ UTL_FILE จะประกอบด้วยการเรียกfopenหนึ่งหรือการโทรมากขึ้นเพื่อPUT_LINEและเรียกร้องให้fclose


4

หากประสิทธิภาพมีความกังวลคุณอาจต้องพิจารณาเครื่องมือจากผู้ขาย

ฉันได้ประเมินเครื่องมือจาก BMC, Wisdomforce, CoSort, DBCrane ทั้งหมดเร็วกว่า spool, utl_file หรือตารางภายนอก เรากำลังใช้DBCraneเพราะเจ้านายของฉันไม่ต้องการใช้จ่ายใบอนุญาตมากเกินไป


3

คุณสามารถใช้โมดูล Python และ cx_Oracle เพื่อดึงข้อมูลไปยังดิสก์ในรูปแบบ CSV

นี่คือวิธีที่คุณเชื่อมต่อกับ Oracle โดยใช้ cx_Oracle:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

หลังจากดึงข้อมูลคุณสามารถวนซ้ำรายการ Python และบันทึกข้อมูลในรูปแบบ CSV

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

ฉันใช้วิธีการนี้เมื่อฉันเขียนTableHunter-For-Oracle

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.