cx_Oracle 插入大的 XMLType 值
cx_Oracle insert large XMLType value
我有以下架构:
create table tc (c1 clob, c2 SYS.XMLTYPE)
我尝试使用以下代码插入:
import cx_Oracle
conn_to = cx_Oracle.connect('user', '...', 'dbserver:1521/ENGR')
cur_to = conn_to.cursor()
insert_sql = 'insert into tc values (:val, :xmlval)'
cur_to.prepare(insert_sql)
cur_to.setinputsizes(val=cx_Oracle.CLOB, xmlval=8196)
cur_to.execute(insert_sql, {'val':('a' * 98196), 'xmlval':('<xml>' + '<inner/>' * 450 + '</xml>')})
conn_to.commit()
生成一个 XML 约 4963 个字符的对象。
但是,如果我将 450 更改为 500,事情将不再有效,我会返回错误
cx_Oracle.DatabaseError: ORA-01461: 只能绑定 LONG 值以插入到 LONG 列
上限好像是5000左右,为什么呢?
哦,等等,它在这里:
import cx_Oracle
conn_to = cx_Oracle.connect('user', '...', 'dbserver:1521/ENGR')
cur_to = conn_to.cursor()
insert_sql = 'insert into tc values (:val, xmltype(:xmlval))' # need to wrap with xmltype() !
cur_to.setinputsizes(val=cx_Oracle.CLOB, xmlval=cx_Oracle.CLOB) # need to set to cx_Oracle.CLOB!
s = ('<xml>' + '<inner/>' * 550 + '</xml>')
cur_to.execute(insert_sql, val = s, xmlval = s)
conn_to.commit()
我有以下架构:
create table tc (c1 clob, c2 SYS.XMLTYPE)
我尝试使用以下代码插入:
import cx_Oracle
conn_to = cx_Oracle.connect('user', '...', 'dbserver:1521/ENGR')
cur_to = conn_to.cursor()
insert_sql = 'insert into tc values (:val, :xmlval)'
cur_to.prepare(insert_sql)
cur_to.setinputsizes(val=cx_Oracle.CLOB, xmlval=8196)
cur_to.execute(insert_sql, {'val':('a' * 98196), 'xmlval':('<xml>' + '<inner/>' * 450 + '</xml>')})
conn_to.commit()
生成一个 XML 约 4963 个字符的对象。 但是,如果我将 450 更改为 500,事情将不再有效,我会返回错误
cx_Oracle.DatabaseError: ORA-01461: 只能绑定 LONG 值以插入到 LONG 列
上限好像是5000左右,为什么呢?
哦,等等,它在这里:
import cx_Oracle
conn_to = cx_Oracle.connect('user', '...', 'dbserver:1521/ENGR')
cur_to = conn_to.cursor()
insert_sql = 'insert into tc values (:val, xmltype(:xmlval))' # need to wrap with xmltype() !
cur_to.setinputsizes(val=cx_Oracle.CLOB, xmlval=cx_Oracle.CLOB) # need to set to cx_Oracle.CLOB!
s = ('<xml>' + '<inner/>' * 550 + '</xml>')
cur_to.execute(insert_sql, val = s, xmlval = s)
conn_to.commit()