[SQL] 오라클 SQL Developer를 사용하여 텍스트 파일에 CLOB 내보내기
SQL오라클 SQL Developer를 사용하여 텍스트 파일에 CLOB 내보내기
나는 오라클 SQL Developer를 사용하여 CSV 파일에 테이블을 수출하려합니다. 필드 중 일부는 CLOB 필드, 그리고 내보내기가 발생했을 때 많은 경우에 항목이 잘립니다. 나는 나의 최종 목표는 여기에 오라클을 사용하지 않는 것입니다으로 (내가 오라클 덤프받은 모든 일을 얻을 수있는 방법을 찾고 있어요 - 오라클 DB에로드했지만를 통해 갈 수 있도록 다른 형식의 데이터를 사용하고 있습니다 CSV) 중간있다.
이 여러 솔루션이 나를 위해 한 번만 절차입니다 주어진이있는 경우, 좀 더 참여에 더 많은 해킹 틱 형 솔루션을 꺼리지 않는 솔루션 "바로 그것을".
해결법
-
==============================
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.당신은 수출 돌봐 파이썬 스크립트를 사용할 수 있으며, 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.오라클에 의해 가정하는 것은 당신이 된 .dmp을 의미 덤프 (중 수출 또는 expdp를에서), 당신은 이진 파일에서 찾고 있습니다. 당신은 오라클 데이터베이스에 덤프 파일을 가져온 다음 UTL_FILE 또는 다른 방법을 사용하여 일반 텍스트로 데이터를 내보낼해야합니다.
오라클에 의해 가정하는 것은 당신이 된 .dmp을 의미 덤프 (중 수출 또는 expdp를에서), 당신은 이진 파일에서 찾고 있습니다. 당신은 오라클 데이터베이스에 덤프 파일을 가져온 다음 UTL_FILE 또는 다른 방법을 사용하여 일반 텍스트로 데이터를 내보낼해야합니다.
-
==============================
4.여기에 그냥 않는 짧은 아직 일반 파이썬 스크립트입니다 - 플랫 csv 파일에 (나머지 중, CLOB 필드로) 덤프 테이블 : OraDump
여기에 그냥 않는 짧은 아직 일반 파이썬 스크립트입니다 - 플랫 csv 파일에 (나머지 중, CLOB 필드로) 덤프 테이블 : OraDump
-
==============================
5.오라클 SQL Developer는 명시 적으로 언급하고 "해킹 틱 형 솔루션은"격려했다 (그리고 경우에 누군가가 ... 필요로 여전히)로 :
오라클 SQL Developer는 명시 적으로 언급하고 "해킹 틱 형 솔루션은"격려했다 (그리고 경우에 누군가가 ... 필요로 여전히)로 :
하나의 문이 (오라클 SQL Developer의)는 SQL 워크 시트에서 실행되는 경우, 결과는 테이블로 표시됩니다. 결과 테이블을 클릭 한 후, 그 내용을 복사 한 후 첫 번째 마크에 전체 테이블을하거나 키보드 단축키 또는 편집 메뉴를 사용합니다. 선택의 텍스트 편집기로 진행합니다. 풀. 파일에 저장합니다. 희망 완료. ;-)
4000 개 문자를 초과하는 CLOB에 대한도 작동합니다. 이 있는지 여부는 실제로 매우 많이 CLOB에 '실제 내용에 따라 달라집니다,하는 데 도움이됩니다. 때때로 일부 SQL의 사전 처리가 당신을 얻을 수 ...
또한 ... 결과 테이블의 로컬 메뉴 내보내기보십시오. (더 나은 CSV 또는 텍스트 / TSV 이상) 엑셀 95-2003 형식 옵션 힘의 작품을 통해 거기에서 간다.
제발 코멘트, 만약 이것이 조정 / 상세 정보를 필요로.
from https://stackoverflow.com/questions/1434443/exporting-a-clob-to-a-text-file-using-oracle-sql-developer by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 서열 값에 의해 그룹 (0) | 2020.07.02 |
---|---|
[SQL] SQLite는 날짜를 비교 (0) | 2020.07.02 |
[SQL] INSERT INTO는 그렇지 않은 경우 SQL 서버에 존재 (0) | 2020.07.02 |
[SQL] SQL 행이 PHP 존재하는지 확인 (0) | 2020.07.02 |
[SQL] SQL 서버 DATETIME 포맷 (0) | 2020.07.02 |