سؤال

أنا باستخدام 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).

يرجى التعليق إذا هذا يتطلب تعديل / مزيد من التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top