วิธีการส่งออกผลลัพธ์แบบสอบถามไปยัง csv ใน Oracle SQL Developer


240

ฉันใช้ Oracle SQL Developer 3.0 พยายามหาวิธีการส่งออกผลลัพธ์แบบสอบถามไปยังไฟล์ข้อความ (ควรเป็น CSV) คลิกขวาที่หน้าต่างผลลัพธ์ข้อความค้นหาไม่ได้ให้ตัวเลือกการส่งออกใด ๆ กับฉัน


คำตอบ:


376

รุ่นที่ฉันใช้

ข้อความแสดงแทน

อัพเดท 5 พฤษภาคม 2555

เจฟฟ์สมิ ธมีbloggedแสดงสิ่งที่ผมเชื่อว่าเป็นวิธีที่ดีกว่าที่จะได้รับการส่งออก CSV จาก SQL Developer วิธีการของ Jeff แสดงตามวิธีที่ 1 ด้านล่าง:

วิธีที่ 1

เพิ่มความคิดเห็น/*csv*/ไปยังแบบสอบถาม SQL ของคุณและเรียกใช้แบบสอบถามเป็นสคริปต์ (ใช้ F5 หรือปุ่มดำเนินการครั้งที่ 2 บนแถบเครื่องมือแผ่นงาน)

ป้อนคำอธิบายรูปภาพที่นี่

แค่นั้นแหละ.

วิธีที่ 2

เรียกใช้แบบสอบถาม

ข้อความแสดงแทน

คลิกขวาและเลือกยกเลิกการโหลด

ปรับปรุง ในการยกเลิกการโหลด Sql Developer Version 3.0.04 ได้ถูกเปลี่ยนเป็นส่งออก ต้องขอบคุณ Janis Peisenieks ที่ชี้ให้เห็นสิ่งนี้

ข้อความแสดงแทน

ภาพหน้าจอที่แก้ไขสำหรับ SQL Developer Version 3.0.04

ป้อนคำอธิบายรูปภาพที่นี่

จากรูปแบบเลื่อนลงเลือก CSV

ข้อความแสดงแทน

และทำตามคำแนะนำบนหน้าจอที่เหลือ


25
+1 คำว่า "ยกเลิกการโหลด" ดูเหมือนต่อต้านฉันง่าย ในการ "โหลด" ข้อมูลบางอย่างหมายถึงการแทรกลงในฐานข้อมูล ดังนั้น "ยกเลิก" จะหมายถึงข้อมูลที่ถูกลบ ...
เจฟฟรีย์เคมพ์

8
ในรุ่น 3.0.04 ตัวเลือกนี้ถูกเปลี่ยนชื่อเป็นส่งออก
Janis Peisenieks

2
ยิ่งใหญ่ ps ตัวพิมพ์ใหญ่ใช้/*CSV*/ไม่ได้สำหรับฉัน แต่ตัวพิมพ์เล็ก/*csv*/ทำ ขอบคุณ!
Eran Medan

3
หมายเหตุวิธีที่ 2 ยังสามารถเรียกใช้เป็นข้อบกพร่อง (ยังคงอยู่ในรุ่น 3.0.04 ของฉัน) ที่มันเพิ่งแฮงค์ที่มีจำนวนแถวขนาดใหญ่ (แถว 3K หรือมากกว่านั้น) ฉันใช้ SQLPLUS โรงเรียนเก่านี้เพราะฉันไม่เห็นวิธีที่ 1 ข้างต้นเป็นครั้งแรก แต่บางคนอาจจะชอบ: {code} SET UNDERLINE ปิด SET COLSEP ',' SET LINES 20000 PAGES 20000 SET FEEDBACK - การเลือกปิดส่วนหัว สปูล C: \ Export \ EMP.csv - ตอนนี้เลือกคิวรี * จาก EMP; สปูลออฟ
จิมพี

1
@topr ใช้วิธีที่ 1 จากนั้นเลือกทั้งหมดคัดลอกและวางลงในโปรแกรมแก้ไขข้อความและบันทึกเป็น csv คุณอาจวางโดยตรงลงใน Excel ได้ แต่ฉันไม่แน่ใจ
เทรวิส

45

ไม่ว่า "ส่งออก" แต่คุณสามารถเลือกแถว (หรือCtrl- Aเพื่อเลือกทั้งหมดของพวกเขา) ในตารางที่คุณต้องการเพื่อการส่งออกและคัดลอกด้วย-CtrlC

ค่าเริ่มต้นคือคั่นด้วยแท็บ คุณสามารถวางลงใน Excel หรือตัวแก้ไขอื่น ๆ และจัดการตัวคั่นตามที่คุณต้องการ

นอกจากนี้หากคุณใช้Ctrl- Shift- Cแทนที่จะเป็นCtrl- Cคุณจะคัดลอกส่วนหัวคอลัมน์


5
ยอดเยี่ยมฉันกำลังมองหาวิธีคัดลอกส่วนหัวโดยเฉพาะ ขอบคุณ!
mishkin

3
ปัญหาเดียวถ้าคุณมีจำนวนมากแถวนี้จะหมายความว่ามันจะต้องสืบค้นชุดข้อมูลทั้งหมดอีกครั้ง และถ้ามันเป็นคิวรีที่ใช้เวลานานนั่นหมายความว่าคุณจะต้องรอหน้าแรกเป็นจำนวนมากจากนั้นรอให้ทุกหน้าหลังจากกด ctrl + A กล่าวอีกอย่างคือทางออกที่ดี แต่ใช้งานได้เกือบตลอดเวลาและเพื่อการค้นหาที่ค่อนข้างเร็วหรือเล็ก
Eran Medan

ในแถวยาวมันจะตัดสิ่งที่คุณคัดลอกมา! ห้ามใช้สิ่งนี้
แฮช

@ Mark ไม่เคยเห็นว่าเกิดขึ้นกับตัวเอง มันเก็บ 50 แถวแรกเท่านั้นหรืออะไรแบบนั้น? หากมีการตั้งค่าแยกต่างหากสำหรับสิ่งนั้น มันจะคัดลอกเฉพาะสิ่งที่อยู่ในตารางในขณะนี้ แต่ถ้าคุณเลื่อนไปที่ด้านล่างของตาราง Dev SQL จะดึงแถวเพิ่มเติมโดยอัตโนมัติดังนั้นฉันสามารถดูว่ามีใครบางคนอาจตีความว่าเป็นข้อบกพร่อง
BQ

1
ฉันพยายามทำสิ่งนี้กับข้อมูล 43K แถวและมันก็ทำงานได้ตลอดไป - ตัวเลือกการส่งออกเร็วขึ้น มันยอดเยี่ยมมากถ้าคุณมีข้อมูลเพียงไม่กี่แถว
izikandrw

28

FYI, คุณสามารถแทน/*csv*/ สำหรับรูปแบบอื่น ๆ เช่นกันรวมทั้งและ/*xml*/ /*html*/select /*xml*/ * from empจะส่งคืนเอกสาร xml พร้อมผลลัพธ์การสืบค้นเช่น ฉันเจอบทความนี้ในขณะที่มองหาวิธีง่ายๆในการคืนค่า xml จากแบบสอบถาม


4
/ * insert * / มีประโยชน์อย่างยิ่ง
jeremyjjbrown

ไฟล์จะไปที่ไหน
ความผิดปกติ

อาไม่เป็นไรฉันได้คัดลอกส่วน "เรียกใช้เป็นสคริปต์" โดยไม่ทราบว่าสิ่งนี้แตกต่างจากปุ่มเรียกใช้ตามปกติ
ความผิดปกติ

4

FYI สำหรับทุกคนที่ประสบปัญหามีข้อผิดพลาดในการส่งออกเวลา CSV ที่ฉันเพิ่งใช้เวลาไม่กี่ชั่วโมงในการแก้ไข บางฟิลด์ที่ฉันต้องการส่งออกเป็นประเภทการประทับเวลา จะปรากฏตัวเลือกการส่งออก CSV แม้ในรุ่นปัจจุบัน (3.0.04 ณ วันที่โพสต์นี้) ล้มเหลวในการใส่สัญลักษณ์การจัดกลุ่มรอบเวลาประทับ น่าผิดหวังมากเนื่องจากช่องว่างในการประทับเวลาทำให้การนำเข้าของฉันเสียหาย วิธีแก้ปัญหาที่ดีที่สุดที่ฉันพบคือการเขียนแบบสอบถามของฉันด้วย TO_CHAR () ในการประทับเวลาทั้งหมดของฉันซึ่งให้ผลลัพธ์ที่ถูกต้องถึงแม้ว่าจะมีงานมากขึ้น ฉันหวังว่าสิ่งนี้จะช่วยให้ใครบางคนประหยัดเวลาหรือทำให้ Oracle ติดอันดับลูกด้วยรุ่นถัดไปของพวกเขา


1
รุ่น 3.0.04 ของฉันยังคงมีข้อบกพร่องที่มันเพิ่งแฮงค์กับการส่งออกขนาดใหญ่ (ฉันเป็นแถว 3K) การแก้ไขที่เรียบง่ายของฉันคือการใช้ SQLPLUS แทน:
Jim P

ในกรณีของฉันประเภทข้อมูลเชิงพื้นที่ ( docs.oracle.com/cd/B19306_01/appdev.102/b14255/… ) กำลังถูกส่งออกเช่นนี้ (สังเกตเห็นเครื่องหมายจุลภาค) MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.39096,37.79251,NULL),NULL,NULL)โดยไม่ต้องใส่เครื่องหมายคำพูด และฉันใช้ไดนามิก SQL ดังนั้นฉันไม่สามารถ TO_CHAR () คอลัมน์เหล่านี้ ข้อเสนอแนะใด ๆ
ถั่วแดง

แม้ว่าฉันจะใช้ Dynamic SQL และเพียงแค่เลือก *, (และฉันไม่ต้องการแก้ไขข้อยกเว้นสำหรับคอลัมน์ SQL เดียวของประเภทข้อมูลเชิงพื้นที่) บางทีฉันอาจลองสองสิ่ง: 1) ใช้ COLSEP อื่นเช่น '|' หรือ 2) ก่อนคำสั่ง SELECT ให้ระบุวิธีการจัดรูปแบบคอลัมน์นี้โดยใช้docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm
Red Pea

2

หากต้องการส่งออกไปยังระบบท้องถิ่นของคุณจากผู้พัฒนา sql

Path : C:\Source_Table_Extract\des_loan_due_dtls_src_boaf.csv

    SPOOL "Path where you want to save the file"
    SELECT /*csv*/ * FROM TABLE_NAME;

1

การส่งออก CSV ไม่หนีข้อมูลของคุณ ระวังสำหรับสตริงซึ่งสิ้นสุดใน\เพราะผล\"จะมีลักษณะเหมือนหนีและไม่ได้เป็น" \จากนั้นคุณมีจำนวนที่ไม่ถูกต้อง"และแถวทั้งหมดของคุณเสีย


นั่นอาจไม่ใช่ข้อผิดพลาด - คุณสามารถตัดสินใจได้ว่าราคาจะหนีอย่างไรและค่าเริ่มต้นคือการหลบหนีด้วยตัวละครอื่นอ้างไม่ใช่ backslash ในกรณี"foo\"นั้นเป็นสตริงที่ถูกต้องสมบูรณ์
Ken Williams

มันง่ายพอที่จะแทนที่ \ \ \ \ \ \ \ ทุกเหตุการณ์ที่เกิดขึ้นถ้าคุณรู้เรื่องนี้ล่วงหน้า ขอบคุณ!
jpaugh

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