복붙노트

[SQL] 오라클 SQL Developer를 사용하여 텍스트 파일에 CLOB 내보내기

SQL

오라클 SQL Developer를 사용하여 텍스트 파일에 CLOB 내보내기

나는 오라클 SQL Developer를 사용하여 CSV 파일에 테이블을 수출하려합니다. 필드 중 일부는 CLOB 필드, 그리고 내보내기가 발생했을 때 많은 경우에 항목이 잘립니다. 나는 나의 최종 목표는 여기에 오라클을 사용하지 않는 것입니다으로 (내가 오라클 덤프받은 모든 일을 얻을 수있는 방법을 찾고 있어요 - 오라클 DB에로드했지만를 통해 갈 수 있도록 다른 형식의 데이터를 사용하고 있습니다 CSV) 중간있다.

이 여러 솔루션이 나를 위해 한 번만 절차입니다 주어진이있는 경우, 좀 더 참여에 더 많은 해킹 틱 형 솔루션을 꺼리지 않는 솔루션 "바로 그것을".

해결법

  1. ==============================

    1.당신이 당신의 데이터베이스 상자에서 파일 시스템에 액세스 할 수있는 경우 당신이 뭔가를 할 수 있습니다 :

    당신이 당신의 데이터베이스 상자에서 파일 시스템에 액세스 할 수있는 경우 당신이 뭔가를 할 수 있습니다 :

    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이 CLOB를 처리하는 방법에 어떤 아이디어 나 경험이 없다.

  2. ==============================

    2.당신은 수출 돌봐 파이썬 스크립트를 사용할 수 있으며, CLOB를 잘립니다되지 않습니다 :

    당신은 수출 돌봐 파이썬 스크립트를 사용할 수 있으며, CLOB를 잘립니다되지 않습니다 :

    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과

  3. ==============================

    3.오라클에 의해 가정하는 것은 당신이 된 .dmp을 의미 덤프 (중 수출 또는 expdp를에서), 당신은 이진 파일에서 찾고 있습니다. 당신은 오라클 데이터베이스에 덤프 파일을 가져온 다음 UTL_FILE 또는 다른 방법을 사용하여 일반 텍스트로 데이터를 내보낼해야합니다.

    오라클에 의해 가정하는 것은 당신이 된 .dmp을 의미 덤프 (중 수출 또는 expdp를에서), 당신은 이진 파일에서 찾고 있습니다. 당신은 오라클 데이터베이스에 덤프 파일을 가져온 다음 UTL_FILE 또는 다른 방법을 사용하여 일반 텍스트로 데이터를 내보낼해야합니다.

  4. ==============================

    4.여기에 그냥 않는 짧은 아직 일반 파이썬 스크립트입니다 - 플랫 csv 파일에 (나머지 중, CLOB 필드로) 덤프 테이블 : OraDump

    여기에 그냥 않는 짧은 아직 일반 파이썬 스크립트입니다 - 플랫 csv 파일에 (나머지 중, CLOB 필드로) 덤프 테이블 : OraDump

  5. ==============================

    5.오라클 SQL Developer는 명시 적으로 언급하고 "해킹 틱 형 솔루션은"격려했다 (그리고 경우에 누군가가 ... 필요로 여전히)로 :

    오라클 SQL Developer는 명시 적으로 언급하고 "해킹 틱 형 솔루션은"격려했다 (그리고 경우에 누군가가 ... 필요로 여전히)로 :

    하나의 문이 (오라클 SQL Developer의)는 SQL 워크 시트에서 실행되는 경우, 결과는 테이블로 표시됩니다. 결과 테이블을 클릭 한 후, 그 내용을 복사 한 후 첫 번째 마크에 전체 테이블을하거나 키보드 단축키 또는 편집 메뉴를 사용합니다. 선택의 텍스트 편집기로 진행합니다. 풀. 파일에 저장합니다. 희망 완료. ;-)

    4000 개 문자를 초과하는 CLOB에 대한도 작동합니다. 이 있는지 여부는 실제로 매우 많이 CLOB에 '실제 내용에 따라 달라집니다,하는 데 도움이됩니다. 때때로 일부 SQL의 사전 처리가 당신을 얻을 수 ...

    또한 ... 결과 테이블의 로컬 메뉴 내보내기보십시오. (더 나은 CSV 또는 텍스트 / TSV 이상) 엑셀 95-2003 형식 옵션 힘의 작품을 통해 거기에서 간다.

    제발 코멘트, 만약 이것이 조정 / 상세 정보를 필요로.

  6. from https://stackoverflow.com/questions/1434443/exporting-a-clob-to-a-text-file-using-oracle-sql-developer by cc-by-sa and MIT license