【发布时间】:2020-10-24 01:04:23
【问题描述】:
我使用下面的 spool 命令通过 CMD 使用 sqlplus 获取数据
set pagesize 0
set term off
set feed off
set colsep ,
spool 'C:\Provident_Workspace\output.csv'
SELECT EO.SLELABEL||','||dbms_lob.substr(EL.LOGTEXT,4000,1)||',' ||utl_raw.cast_to_varchar2(dbms_lob.substr(SR.SODATA,4000,1))
FROM SORECORD SR, SOAPPKEY SK, EPTORDER EO, EPTLOG EL
WHERE SK.APPKEYNAME = 'MSISDN'
AND SK.appkeyvalue = '07996703863'
AND SK.SOID = SR.SOID
AND SR.SOTYPE = 'NAC'
AND trunc(SR.Receipttimestamp) = date '2020-01-07' AND SR.SOID = EO.SOID
AND EO.EPTNUMBER = EL.EPTNUMBER AND EL.SOID LIKE TO_CHAR((Select SUBSTR(TO_CHAR(SR.SOID), 1, LENGTH(SR.SOID)-1) FROM SORECORD SR, SOAPPKEY SK WHERE SK.APPKEYNAME = 'MSISDN' AND SK.appkeyvalue = '07996703863' AND SK.SOID = SR.SOID AND SR.SOTYPE = 'NAC' AND trunc(SR.Receipttimestamp) = date '2020-01-07')) || '%' AND EL.SOID > TO_NUMBER((Select SUBSTR(TO_CHAR(SR.SOID),1, LENGTH(SR.SOID)-1) FROM SORECORD SR, SOAPPKEY SK WHERE SK.APPKEYNAME = 'MSISDN' AND SK.appkeyvalue = '07996703863' AND SK.SOID = SR.SOID AND SR.SOTYPE = 'NAC' AND trunc(SR.Receipttimestamp) = date '2020-01-07') || '0');
spool off
通过 cmd 在 SQLPLUS 上运行此命令时,出现 ORA-01489 错误。现在我知道为什么会这样了,EL.LOGTEXT 是 CLOB 数据类型,SR.SODATA 是 BLOB 数据类型。两者都包含大量的多行数据,并且它们的连接可能会超过 4000 字节。
有什么方法可以让这个查询工作而不会丢失任何数据?
我需要 CSV 文件中的表格格式的这 3 列,以便我可以使用 Python 的内置 csv 模块轻松迭代它们。
【问题讨论】:
-
为什么不让您的 python 应用程序连接到数据库并直接处理数据?
-
@thatjeffsmith 对我正在工作的 VM 有一些限制,因此 SQL*PLUS 是提供给我们的唯一选项。无论如何,克里斯托弗的回答对我有用。谢谢大家!
标签: python oracle csv oracle-sqldeveloper sqlplus