it-swarm.asia

كيف يمكنني إلغاء تحميل جداول قاعدة بيانات Oracle في ملفات csv؟

أحتاج إلى استرداد بيانات معينة من قاعدة بيانات Oracle 11g للإصدار 1 وتقديمها كملف CSV واحد أو أكثر. البيانات موجودة في جداول و/أو طرق عرض متعددة. يجب أن يعمل كل هذا عبر سطر الأوامر. ما هو أفضل نهج لهذا؟

18
aPhilRa

أرون ،

الآن أصبح 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 مدونة كريس

قبل استخدام 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 خيارًا أفضل.

رونالد.

11
ik_zelf

يجب أن تنظر إلى الحزمة المدمجة UTL_FILE . هناك عدة طرق يمكنك استخدامها.

  1. يمكنك كتابة أي عدد من الإجراءات في الحزم التي تستخدم حزمة UTL_FILE للكتابة على أي عدد من الملفات. يمكن استدعاء هذه الإجراءات من أي تطبيق تقريبًا بما في ذلك SQL * Plus.

  2. يمكنك كتابة برنامج نصي PL/SQL للقيام بنفس العمل واستدعاء البرنامج النصي من سطر أوامر SQL * Plus نفسه عن طريق تحديدscriptname في سطر الأوامر.

  3. يمكنك لصق كتلة باستخدام UTL_FILE مباشرة في SQL * Plus ، ولكن يجب استخدام هذا فقط للتصدير مرة واحدة وحتى ذلك الحين قد لا يكون أفضل مسار.

في أبسط صورها ، ستتألف عملية تصدير ملف باستخدام UTL_FILE من استدعاء [~ # ~] fopen [~ # ~] ، مكالمة واحدة أو أكثر إلى PUT_LINE ، ومكالمة إلى [~ # ~] fclose [~ # ~] .

8
Leigh Riffel

إذا كان الأداء مصدر قلق ، فقد ترغب في التفكير في أدوات من البائعين.

لقد قمت بتقييم أدوات من BMC ، Wisdomforce ، CoSort ، DBCrane. كلها أسرع بكثير من التخزين المؤقت أو utl_file أو الجدول الخارجي. نحن نستخدم DBCrane لأن مديري لم يرغب في إنفاق الكثير على الترخيص.

4
Lei

يمكنك استخدام Python و cx_Oracle الوحدة النمطية لاستخراج البيانات إلى القرص بتنسيق CSV.

إليك كيفية الاتصال بـ Oracle باستخدام cx_Oracle:

constr='scott/[email protected]: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

3
Alex Buzunov