【问题标题】:cx_Oracle insert large XMLType valuecx_Oracle 插入较大的 XMLType 值
【发布时间】:2015-07-29 20:46:30
【问题描述】:

我有以下架构:

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()

生成大约 4963 个字符的 XML 对象。 但是,如果我将 450 更改为 500,事情将不再有效,我会返回一个错误

cx_Oracle.DatabaseError: ORA-01461: can bind a LONG value only for insert into a LONG column

限制似乎在 5000 左右,但为什么呢?

【问题讨论】:

    标签: python oracle cx-oracle


    【解决方案1】:

    哦,等等,这里是:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2012-11-12
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2012-07-01
      相关资源
      最近更新 更多