<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Python_%EC%98%A4%EB%9D%BC%ED%81%B4_%EC%97%B0%EA%B2%B0_cx_oracle</id>
	<title>Python 오라클 연결 cx oracle - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Python_%EC%98%A4%EB%9D%BC%ED%81%B4_%EC%97%B0%EA%B2%B0_cx_oracle"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Python_%EC%98%A4%EB%9D%BC%ED%81%B4_%EC%97%B0%EA%B2%B0_cx_oracle&amp;action=history"/>
	<updated>2026-05-17T13:01:31Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Python_%EC%98%A4%EB%9D%BC%ED%81%B4_%EC%97%B0%EA%B2%B0_cx_oracle&amp;diff=38&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == 아키텍처 == https://oracle.github.io/python-cx_Oracle/samples/tutorial/resources/cx_Oracle_arch.png ---- == 설치 / 설정 == === 접속 모듈 설치 === &lt;source lang=python&gt; pip install cx_Oracle &lt;/source&gt; ---- === 사용자 매뉴얼 === https://cx-oracle.readthedocs.io/en/latest/user_guide/sql_execution.html#fetch-methods   == 연결 == === 접속 테스트 === &lt;source lang=python&gt; import cx_Oracle  #한글 지원 방법 import os os.putenv(&#039;NLS_LANG&#039;, &#039;.UTF8&#039;)  #연...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Python_%EC%98%A4%EB%9D%BC%ED%81%B4_%EC%97%B0%EA%B2%B0_cx_oracle&amp;diff=38&amp;oldid=prev"/>
		<updated>2024-10-04T15:25:29Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == 아키텍처 == https://oracle.github.io/python-cx_Oracle/samples/tutorial/resources/cx_Oracle_arch.png ---- == 설치 / 설정 == === 접속 모듈 설치 === &amp;lt;source lang=python&amp;gt; pip install cx_Oracle &amp;lt;/source&amp;gt; ---- === 사용자 매뉴얼 === https://cx-oracle.readthedocs.io/en/latest/user_guide/sql_execution.html#fetch-methods   == 연결 == === 접속 테스트 === &amp;lt;source lang=python&amp;gt; import cx_Oracle  #한글 지원 방법 import os os.putenv(&amp;#039;NLS_LANG&amp;#039;, &amp;#039;.UTF8&amp;#039;)  #연...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 아키텍처 ==&lt;br /&gt;
https://oracle.github.io/python-cx_Oracle/samples/tutorial/resources/cx_Oracle_arch.png&lt;br /&gt;
----&lt;br /&gt;
== 설치 / 설정 ==&lt;br /&gt;
=== 접속 모듈 설치 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
pip install cx_Oracle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 사용자 매뉴얼 ===&lt;br /&gt;
https://cx-oracle.readthedocs.io/en/latest/user_guide/sql_execution.html#fetch-methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 연결 ==&lt;br /&gt;
=== 접속 테스트 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
&lt;br /&gt;
#한글 지원 방법&lt;br /&gt;
import os&lt;br /&gt;
os.putenv(&amp;#039;NLS_LANG&amp;#039;, &amp;#039;.UTF8&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
#연결에 필요한 기본 정보 (유저, 비밀번호, 데이터베이스 서버 주소)&lt;br /&gt;
connection = cx_Oracle.connect(&amp;#039;Id&amp;#039;,&amp;#039;password&amp;#039;,&amp;#039;localhost/orcl&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# 오라클 버전 확인 &lt;br /&gt;
print(&amp;quot;Database version:&amp;quot;, connection.version)&lt;br /&gt;
print(&amp;quot;Client version:&amp;quot;, cx_Oracle.clientversion())&lt;br /&gt;
&lt;br /&gt;
# 커셔 연결 &lt;br /&gt;
cursor = connection.cursor()&lt;br /&gt;
&lt;br /&gt;
cursor.execute(&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   select name&lt;br /&gt;
   from test_db&lt;br /&gt;
   where text = :texting&amp;quot;&amp;quot;&amp;quot;,&lt;br /&gt;
   texting = &amp;quot;테스트&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
for name in cursor:&lt;br /&gt;
   print(&amp;quot;테스트 이름 리스트 : &amp;quot;, name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 종료&lt;br /&gt;
cursor.close()&lt;br /&gt;
connection.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 커넥션 풀 사용하기 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import threading&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
pool = cx_Oracle.SessionPool(db_config.user, db_config.pw, db_config.dsn,&lt;br /&gt;
                             min = 2, max = 5, increment = 1, threaded = True,&lt;br /&gt;
                             getmode = cx_Oracle.SPOOL_ATTRVAL_WAIT)&lt;br /&gt;
&lt;br /&gt;
def Query():&lt;br /&gt;
    con = pool.acquire()&lt;br /&gt;
    cur = con.cursor()&lt;br /&gt;
    for i in range(4):&lt;br /&gt;
        cur.execute(&amp;quot;select myseq.nextval from dual&amp;quot;)&lt;br /&gt;
        seqval, = cur.fetchone()&lt;br /&gt;
        print(&amp;quot;Thread&amp;quot;, threading.current_thread().name, &amp;quot;fetched sequence =&amp;quot;, seqval)&lt;br /&gt;
&lt;br /&gt;
numberOfThreads = 2&lt;br /&gt;
threadArray = []&lt;br /&gt;
&lt;br /&gt;
for i in range(numberOfThreads):&lt;br /&gt;
    thread = threading.Thread(name = &amp;#039;#&amp;#039; + str(i), target = Query)&lt;br /&gt;
    threadArray.append(thread)&lt;br /&gt;
    thread.start()&lt;br /&gt;
&lt;br /&gt;
for t in threadArray:&lt;br /&gt;
    t.join()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;All done!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DRCP 커넥션풀 사용하기 ===&lt;br /&gt;
&lt;br /&gt;
{{고지상자&lt;br /&gt;
|제목 = DRCP (Database Resident Connection Pooling) &lt;br /&gt;
|내용 = # DRCP (Database Resident Connection Pooling) 기능은 DB 접속을 위한 커넥션 공유풀을 공동사용하게 함으로써 DB 서버의 자원 사용을 절약하는 기능&lt;br /&gt;
# 만약 1000개의 프로세스가 DB 접속 하는 경우, 기본적으로 1000개의 클라이언트 처리요청을 지원하기 위해 1000개의 Dedicated Server Process 를 기동 해야함&lt;br /&gt;
# WAS 를 사용하지 않는 경우, DB 차원에서 이런 &amp;quot;공유 커넥션 풀&amp;quot; 기능을 제공&lt;br /&gt;
# 오라클 DB에서 2가지 Shared Server 방식과 DRCP(Database Resident Connection Pooling) 방식 제공&lt;br /&gt;
}}&lt;br /&gt;
* 동시 접속이 많은 경우 DB 서버의 자원이 금방 고갈될 수 밖에 없는 문제를 해결하기 위해 보통은 WAS (Web Application Server) 차원에서 커넥션풀을 만들어서 DB접속풀 공유하면서 사용하는 것이 일반적임.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import threading&lt;br /&gt;
&lt;br /&gt;
pool = cx_Oracle.SessionPool(db_config.user, db_config.pw, db_config.dsn + &amp;quot;:pooled&amp;quot;,&lt;br /&gt;
                             min = 2, max = 5, increment = 1, threaded = True,&lt;br /&gt;
                             getmode = cx_Oracle.SPOOL_ATTRVAL_WAIT)&lt;br /&gt;
&lt;br /&gt;
def Query():&lt;br /&gt;
    con = pool.acquire(cclass = &amp;quot;PYTHONHOL&amp;quot;, purity = cx_Oracle.ATTR_PURITY_SELF)&lt;br /&gt;
    cur = conn.cursor()&lt;br /&gt;
    for i in range(4):&lt;br /&gt;
        cur.execute(&amp;quot;select myseq.nextval from dual&amp;quot;)&lt;br /&gt;
        seqval, = cur.fetchone()&lt;br /&gt;
        print(&amp;quot;Thread&amp;quot;, threading.current_thread().name, &amp;quot;fetched sequence =&amp;quot;, seqval)&lt;br /&gt;
&lt;br /&gt;
numberOfThreads = 2&lt;br /&gt;
threadArray = []&lt;br /&gt;
&lt;br /&gt;
for i in range(numberOfThreads):&lt;br /&gt;
    thread = threading.Thread(name = &amp;#039;#&amp;#039; + str(i), target = Query)&lt;br /&gt;
    threadArray.append(thread)&lt;br /&gt;
    thread.start()&lt;br /&gt;
&lt;br /&gt;
for t in threadArray:&lt;br /&gt;
    t.join()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;All done!&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 조회 / 패치 ==&lt;br /&gt;
=== fetchone() 함수를 사용하여 1건 패치 ===&lt;br /&gt;
* 로우갯수가 많을때 fetchall() 함수는 너무 많은 메모리 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
cur.execute(&amp;quot;select * from dept order by deptno&amp;quot;)&lt;br /&gt;
row = cur.fetchone()&lt;br /&gt;
print(row)&lt;br /&gt;
&lt;br /&gt;
row = cur.fetchone()&lt;br /&gt;
print(row)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== fetchmany() 사용하여 다건 패치 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
cur.execute(&amp;quot;select * from dept order by deptno&amp;quot;)&lt;br /&gt;
res = cur.fetchmany(numRows = 3)&lt;br /&gt;
print(res)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scrollable cursors ===&lt;br /&gt;
# 스크롤 가능한 커서를 사용하면 응용 프로그램이 쿼리 결과에서 앞뒤로 이동할 수 있습니다. &lt;br /&gt;
# 행을 건너뛰고 특정 행으로 이동하는 데 사용할 수 있습니다.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor(scrollable = True)&lt;br /&gt;
&lt;br /&gt;
cur.execute(&amp;quot;select * from dept order by deptno&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cur.scroll(2, mode = &amp;quot;absolute&amp;quot;)  # go to second row&lt;br /&gt;
print(cur.fetchone())&lt;br /&gt;
&lt;br /&gt;
cur.scroll(-1)                    # go back one row&lt;br /&gt;
print(cur.fetchone())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
cur.scroll(1)  # go to next row&lt;br /&gt;
print(cur.fetchone())&lt;br /&gt;
&lt;br /&gt;
cur.scroll(mode = &amp;quot;first&amp;quot;)  # go to first row&lt;br /&gt;
print(cur.fetchone())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 프리패치 ===&lt;br /&gt;
# Python 프로그램으로 각 일괄 처리에서 반환되는 행 수를 늘려 쿼리 성능을 개선하는 방법&lt;br /&gt;
# 행을 미리 가져오기 및 배열 가져오기는 모두 데이터베이스로의 왕복을 줄이기 위한 내부 버퍼링 기술입니다. &lt;br /&gt;
# 차이점은 버퍼링을 수행하는 코드 레이어와 버퍼링이 발생하는 시기입니다.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import time&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
&lt;br /&gt;
start = time.time()&lt;br /&gt;
&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
cur.prefetchrows = 100&lt;br /&gt;
cur.arraysize = 100&lt;br /&gt;
cur.execute(&amp;quot;select * from bigtab&amp;quot;)&lt;br /&gt;
res = cur.fetchall()&lt;br /&gt;
# print(res)  # uncomment to display the query results&lt;br /&gt;
&lt;br /&gt;
elapsed = (time.time() - start)&lt;br /&gt;
print(elapsed, &amp;quot;seconds&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 바인드 변수 사용하기 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
sql = &amp;quot;select * from dept where deptno = :id order by deptno&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cur.execute(sql, id = 20)&lt;br /&gt;
res = cur.fetchall()&lt;br /&gt;
print(res)&lt;br /&gt;
&lt;br /&gt;
cur.execute(sql, id = 10)&lt;br /&gt;
res = cur.fetchall()&lt;br /&gt;
print(res)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  바인딩 입력 처리 ==&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
rows = [ (1, &amp;quot;First&amp;quot; ), (2, &amp;quot;Second&amp;quot; ),&lt;br /&gt;
         (3, &amp;quot;Third&amp;quot; ), (4, &amp;quot;Fourth&amp;quot; ),&lt;br /&gt;
         (5, &amp;quot;Fifth&amp;quot; ), (6, &amp;quot;Sixth&amp;quot; ),&lt;br /&gt;
         (7, &amp;quot;Seventh&amp;quot; ) ]&lt;br /&gt;
&lt;br /&gt;
cur.executemany(&amp;quot;insert into mytab(id, data) values (:1, :2)&amp;quot;, rows)&lt;br /&gt;
&lt;br /&gt;
# Now query the results back&lt;br /&gt;
&lt;br /&gt;
cur2 = con.cursor()&lt;br /&gt;
cur2.execute(&amp;#039;select * from mytab&amp;#039;)&lt;br /&gt;
res = cur2.fetchall()&lt;br /&gt;
print(res)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 에러 처리 ==&lt;br /&gt;
=== 배치 에러 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
# 예를 들어 6 이 중복입력 되어 유니크 제약 조건 오류가 발생된경우 &lt;br /&gt;
&lt;br /&gt;
rows = [ (1, &amp;quot;First&amp;quot; ), (2, &amp;quot;Second&amp;quot; ),&lt;br /&gt;
         (3, &amp;quot;Third&amp;quot; ), (4, &amp;quot;Fourth&amp;quot; ),&lt;br /&gt;
         (5, &amp;quot;Fifth&amp;quot; ), (6, &amp;quot;Sixth&amp;quot; ),&lt;br /&gt;
         (6, &amp;quot;Duplicate&amp;quot; ),&lt;br /&gt;
         (7, &amp;quot;Seventh&amp;quot; ) ]&lt;br /&gt;
&lt;br /&gt;
cur.executemany(&amp;quot;insert into mytab(id, data) values (:1, :2)&amp;quot;, rows, batcherrors = True)&lt;br /&gt;
&lt;br /&gt;
for error in cur.getbatcherrors():&lt;br /&gt;
    print(&amp;quot;Error&amp;quot;, error.message.rstrip(), &amp;quot;at row offset&amp;quot;, error.offset)&lt;br /&gt;
&lt;br /&gt;
# Now query the results back&lt;br /&gt;
&lt;br /&gt;
cur2 = con.cursor()&lt;br /&gt;
cur2.execute(&amp;#039;select * from mytab&amp;#039;)&lt;br /&gt;
res = cur2.fetchall()&lt;br /&gt;
print(res)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/python&amp;gt;&lt;br /&gt;
The other data gets inserted and is queried back.&lt;br /&gt;
에러가 발생된 값을 제외 하고 모두 입력된다.&lt;br /&gt;
&lt;br /&gt;
또한 커밋 이나 롤백 처리를 할수 있다. &lt;br /&gt;
&lt;br /&gt;
* 커밋처리 시 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
con.commit()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 롤백처리 시 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
con.rollback()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOB 처리 ==&lt;br /&gt;
=== CLOB 조회 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Inserting data...&amp;quot;)&lt;br /&gt;
cur.execute(&amp;quot;truncate table testclobs&amp;quot;)&lt;br /&gt;
longString = &amp;quot;&amp;quot;&lt;br /&gt;
for i in range(5):&lt;br /&gt;
    char = chr(ord(&amp;#039;A&amp;#039;) + i)&lt;br /&gt;
    longString += char * 250&lt;br /&gt;
    cur.execute(&amp;quot;insert into testclobs values (:1, :2)&amp;quot;,&lt;br /&gt;
                   (i + 1, &amp;quot;String data &amp;quot; + longString + &amp;#039; End of string&amp;#039;))&lt;br /&gt;
con.commit()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Querying data...&amp;quot;)&lt;br /&gt;
cur.execute(&amp;quot;select * from testclobs where id = :id&amp;quot;, {&amp;#039;id&amp;#039;: 1})&lt;br /&gt;
(id, clob) = cur.fetchone()&lt;br /&gt;
print(&amp;quot;CLOB length:&amp;quot;, clob.size())&lt;br /&gt;
clobdata = clob.read()&lt;br /&gt;
print(&amp;quot;CLOB data:&amp;quot;, clobdata)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CLOB 문자열 처리 ===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import cx_Oracle&lt;br /&gt;
import db_config&lt;br /&gt;
&lt;br /&gt;
con = cx_Oracle.connect(db_config.user, db_config.pw, db_config.dsn)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Inserting data...&amp;quot;)&lt;br /&gt;
cur.execute(&amp;quot;truncate table testclobs&amp;quot;)&lt;br /&gt;
longString = &amp;quot;&amp;quot;&lt;br /&gt;
for i in range(5):&lt;br /&gt;
    char = chr(ord(&amp;#039;A&amp;#039;) + i)&lt;br /&gt;
    longString += char * 250&lt;br /&gt;
    cur.execute(&amp;quot;insert into testclobs values (:1, :2)&amp;quot;,&lt;br /&gt;
                (i + 1, &amp;quot;String data &amp;quot; + longString + &amp;#039; End of string&amp;#039;))&lt;br /&gt;
con.commit()&lt;br /&gt;
&lt;br /&gt;
def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):&lt;br /&gt;
    if defaultType == cx_Oracle.CLOB:&lt;br /&gt;
        return cursor.var(cx_Oracle.LONG_STRING, arraysize = cursor.arraysize)&lt;br /&gt;
&lt;br /&gt;
con.outputtypehandler = OutputTypeHandler&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Querying data...&amp;quot;)&lt;br /&gt;
cur.execute(&amp;quot;select * from testclobs where id = :id&amp;quot;, {&amp;#039;id&amp;#039;: 1})&lt;br /&gt;
(id, clobdata) = cur.fetchone()&lt;br /&gt;
print(&amp;quot;CLOB length:&amp;quot;, len(clobdata))&lt;br /&gt;
print(&amp;quot;CLOB data:&amp;quot;, clobdata)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 참조 https://oracle.github.io/python-cx_Oracle/samples/tutorial/Python-and-Oracle-Database-Scripting-for-the-Future.html&lt;br /&gt;
&lt;br /&gt;
[[Category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>