LOB.read(0)
gives unhelpful error message in thin mode · Issue #13 · oracle/python-oracledb (original) (raw)
The following Python script:
import oracledb db = oracledb.connect("user/pwd@db") c = db.cursor() c.execute("select to_clob('foo') from dual").fetchone()[0].read(0)
gives the following output:
Traceback (most recent call last):
File "/Users/walter/oracledb_bug.py", line 4, in <module>
c.execute("select to_clob('foo') from dual").fetchone()[0].read(0)
File "/Users/walter/pyvenvs/default/lib/python3.10/site-packages/oracledb/lob.py", line 116, in read
return self._impl.read(offset, amount)
File "src/oracledb/impl/thin/lob.pyx", line 140, in oracledb.thin_impl.ThinLobImpl.read
File "src/oracledb/impl/thin/protocol.pyx", line 294, in oracledb.thin_impl.Protocol._process_single_message
File "src/oracledb/impl/thin/protocol.pyx", line 295, in oracledb.thin_impl.Protocol._process_single_message
File "src/oracledb/impl/thin/protocol.pyx", line 288, in oracledb.thin_impl.Protocol._process_message
oracledb.exceptions.DatabaseError: ORA-03137: malformed TTC packet from client rejected: [kpolob:offset 0] [0] [0] [2] [] [] [] []
In thick mode I get:
Traceback (most recent call last):
File "/Users/walter/oracledb_bug.py", line 5, in <module>
c.execute("select to_clob('foo') from dual").fetchone()[0].read(0)
File "/Users/walter/pyvenvs/default/lib/python3.10/site-packages/oracledb/lob.py", line 116, in read
return self._impl.read(offset, amount)
File "src/oracledb/impl/thick/lob.pyx", line 168, in oracledb.thick_impl.ThickLobImpl.read
File "src/oracledb/impl/thick/utils.pyx", line 409, in oracledb.thick_impl._raise_from_odpi
File "src/oracledb/impl/thick/utils.pyx", line 399, in oracledb.thick_impl._raise_from_info
oracledb.exceptions.DatabaseError: ORA-24801: Unzulässiger Parameterwert in OCI-LOB-Funktion
which at least gives a hint at what the problem is.
import sys, platform, oracledb
print(f"{platform.platform()=}") print(f"{sys.maxsize > 2**32=}") print(f"{platform.python_version()=}") print(f"{oracledb.version=}")
prints
platform.platform()='macOS-12.4-x86_64-i386-64bit'
sys.maxsize > 2**32=True
platform.python_version()='3.10.4'
oracledb.__version__='1.0.0'
The database is an Oracle XE.
select value from nls_database_parameters where parameter='NLS_RDBMS_VERSION';
returns 21.0.0.0.0
.