تصدير CLOB إلى ملف نصي باستخدام Oracle SQL Developer
-
07-07-2019 - |
سؤال
أنا باستخدام SQL Oracle Developer و محاولة تصدير جدول إلى ملف CSV.بعض الحقول CLOB المجالات ، و في كثير من الحالات الإدخالات يتم اقتطاع عند تصدير يحدث.أنا أبحث عن طريقة للحصول على كل شيء ، كما هو هدفي نهاية إلى عدم استخدام أوراكل هنا (وصلتني Oracle تفريغ - التي تم تحميلها في oracle db, ولكن أنا باستخدام البيانات في شكل آخر حيث تسير عبر CSV كوسيط).
إذا كان هناك عدة حلول لهذه بالنظر إلى أن مرة واحدة الإجراء بالنسبة لي, أنا لا أمانع أكثر هاك-ايش نوع حلول أكثر انخراطا "تفعل ذلك الحق" الحلول.
المحلول
وإذا كان لديك الوصول إلى نظام الملفات على مربع قاعدة البيانات الخاصة بك هل يمكن أن تفعل شيئا من هذا القبيل:
CREATE OR REPLACE DIRECTORY documents AS 'C:\';
SET SERVEROUTPUT ON
DECLARE
l_file UTL_FILE.FILE_TYPE;
l_clob CLOB;
l_buffer VARCHAR2(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
BEGIN
SELECT col1
INTO l_clob
FROM tab1
WHERE rownum = 1;
l_file := UTL_FILE.fopen('DOCUMENTS', 'Sample2.txt', 'w', 32767);
LOOP
DBMS_LOB.read (l_clob, l_amount, l_pos, l_buffer);
UTL_FILE.put(l_file, l_buffer);
l_pos := l_pos + l_amount;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
UTL_FILE.fclose(l_file);
END;
/
ما أنا نسخ ولصق من هذا الموقع .
ويمكنك أيضا العثور على هذا السؤال السابق حول UTL_FILE مفيدة. ويتناول التصدير إلى CSV. ليس لدي أي فكرة أو تجربة مع كيفية UTL_FILE يعالج CLOBs، ولكن.
نصائح أخرى
ويمكنك استخدام برنامج نصي بيثون لرعاية تصدير، فإن CLOBs لا تحصل على اقتطاع:
from __future__ import print_function
from __future__ import division
import time
import cx_Oracle
def get_cursor():
'''
Get a cursor to the database
'''
# https://stackoverflow.com/questions/24149138/cx-oracle-doesnt-connect-when-using-sid-instead-of-service-name-on-connection-s
# http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html
ip = '' # E.g. '127.0.0.1'
port = '' # e.g. '3306'
sid = ''
dsnStr = cx_Oracle.makedsn(ip, port, sid)
username = '' # E.g. 'FRANCK'
password = '' # E.g. '123456'
db = cx_Oracle.connect(user=username, password=password, dsn=dsnStr)
cursor = db.cursor()
return cursor
def read_sql(filename):
'''
Read an SQL file and return it as a string
'''
file = open(filename, 'r')
return ' '.join(file.readlines()).replace(';', '')
def execute_sql_file(filename, cursor, verbose = False, display_query = False):
'''
Execute an SQL file and return the results
'''
sql = read_sql(filename)
if display_query: print(sql)
start = time.time()
if verbose: print('SQL query started... ', end='')
cursor.execute(sql)
if verbose:
end = time.time()
print('SQL query done. (took {0} seconds)'.format(end - start))
return cursor
def main():
'''
This is the main function
'''
# Demo:
cursor = get_cursor()
sql_filename = 'your_query.sql' # Write your query there
cursor = execute_sql_file(sql_filename, cursor, True)
result_filename = 'result.csv' # Will export your query result there
result_file = open(result_filename, 'w')
delimiter = ','
for row in cursor:
for count, column in enumerate(row):
if count > 0: result_file.write(delimiter)
result_file.write(str(column))
result_file.write('\n')
result_file.close()
if __name__ == "__main__":
main()
#cProfile.run('main()') # if you want to do some profiling
ومعلوماتك: مساعدة تركيب cx_Oracle
وعلى افتراض من قبل أوراكل تفريغ لك يعني .dmp (إما من تصدير أو expdp)، كنت تبحث في ملف ثنائي. ستحتاج إلى استيراد dumpfile في قاعدة بيانات Oracle ثم تصدير البيانات إلى نص عادي باستخدام UTL_FILE أو وسائل أخرى.
وهنا يبعد مسافة قصيرة النصي الثعبان بعد عام على أن يفعل هذا فقط - الجداول الإغراق (مع الحقول CLOB، من بين بقية) إلى ملف CSV شقة: <لأ href = "http://staff.science.uva.nl/ ~ otsur / القانون / OraDump.py "يختلط =" نوفولو noreferrer "> OraDump
كما Oracle SQL المطور صراحة و "هاك-ايش نوع حلول" شجعت (و في حالة شخص لا يزال في حاجة إلى...):
إذا كان بيان واحد يتم تنفيذه من SQL ورقة العمل (في SQL Oracle Developer) ، يتم عرض النتيجة كما في الجدول.بعد النقر على نتيجة الجدول استخدم اختصارات لوحة المفاتيح أو تحرير القائمة الأولى مارك الطاولة كلها ثم نسخ محتواه.انتقل إلى محرر النص الخاص بك في الاختيار.لصق.حفظ إلى ملف.نأمل القيام به.;-)
يعمل حتى على CLOBs تتجاوز 4000 حرف.ما إذا كان يساعد في الواقع, سوف نعتمد كثيرا على CLOBs' المحتوى الفعلي.أحيانا بعض SQL قبل المعالجة قد تحصل هناك...
بدلا من ذلك حاول في النتيجة الجدول القائمة المحلية تصدير....من هناك من خلال Excel 95-2003 شكل الخيار قد عمل (أفضل من CSV أو النص/TSV).
يرجى التعليق إذا هذا يتطلب تعديل / مزيد من التفاصيل.