【问题标题】:Python cx_Oracle unable to insert XMLType in Oracle 11g database using a stored procedurePython cx_Oracle 无法使用存储过程在 Oracle 11g 数据库中插入 XMLType
【发布时间】:2021-07-30 20:43:08
【问题描述】:

我正在尝试在 Python 中调用存储过程来插入 XML 数据,但它不起作用:(

这里有详细信息-

create or replace procedure t(a in XMLType, b out number) as
begin
  b := 5;
end;
/

代码是 -

xmlData = """<?xml version="1.0"?>
        <customer>
            <name>John Smith</name>
            <Age>43</Age>
            <Designation>Professor</Designation>
            <Subject>Mathematics</Subject>
        </customer>"""
xmlval=cx_Oracle.CLOB
xmlval = xmlData
try:
  
    r=c.var(cx_Oracle.NUMBER)
    c.callproc("T", [xmlval,r])
    print("Result = ",r.getvalue(pos=0))
 
    c.close()
except cx_Oracle.DatabaseError as ex:
    err, =ex.args
    print("Error code    = ",err.code)
    print("Error Message = ",err.message)
    os._exit(1)

【问题讨论】:

    标签: python xml oracle plsql cx-oracle


    【解决方案1】:

    您可以将其作为 CLOB 传递给包装函数或匿名 PL/SQL 块,例如:

    c.execute("begin t(sys.xmltype(:xmlval),:r); end;", [xmlval,r])
    

    cx_Oracle manual 中有一些关于绑定有关 XMLType 的 LOB 的背景。

    【讨论】:

      【解决方案2】:

      所以这实际上不是一个答案,但我无法发表评论,因为我没有 50 声望。

      但您可以尝试像这样设置 xmlval 的值:

      xmlval=cx_Oracle.CLOB
      xmlval.setvalue(0, xmlData)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多