【问题标题】:Python cx_Oracle in/out variables for callproc用于 callproc 的 Python cx_Oracle 输入/输出变量
【发布时间】:2020-11-19 10:42:09
【问题描述】:

我有一个预言机程序,它应该返回一大块 json。

程序有4个参数

输入是一个ID值 输出json CLOB 输出一些json格式的信息CLOB 成功或失败输出 varchar2

所以在我的代码中我做了以下只是为了测试我是否可以成功调用并返回它

ConnectionString = 'someconnection.connection'
con = cx_Oracle.connect(ConnectionString)
cur = con.cursor()

ID = '51858645'
json_out = cur.var(cx_Oracle.CLOB)
message = cur.var(cx_Oracle.CLOB)
status = cur.var(cx_Oracle.STRING)
oracle_return = cur.callproc('project.getsomejson',[ID,json_out,message,status])

但是,它失败并返回

PLS-00306: wrong number or types of arguments in call to 'getsomejson'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

这是过程定义

procedure callOracle(json_in clob,json_out out clob,message out clob,status out varchar2)

这是调用 oracle 12c db 我真的不熟悉python中的调用过程。通常我用存储的类型调用func并得到一个返回

【问题讨论】:

  • 给我们实际的 PL/SQL 过程定义,这样我们就不必猜测不匹配可能是什么。还要给我们 cx_Oracle 版本以及 Oracle 客户端库和 Oracle DB 版本,因为行为在整个版本中都发生了变化。
  • @ChristopherJones 添加在底部

标签: python python-2.7 procedure cx-oracle


【解决方案1】:

程序正在等待

CLOB、CLOB、CLOB、VARCHAR2

但你正在通过

VARCHAR2、CLOB、CLOB、VARCHAR2

您提供的名称 (callOracle) 也与您在 Python 中调用的名称 (project.getsomejson) 不匹配。也许验证你有正确的程序签名?但是,假设它是正确的,您需要将第一个也更改为 CLOB,或者将存储过程更改为接受 VARCHAR2。应该这样做:

json_in = conn.createlob(cx_Oracle.DB_TYPE_CLOB)
json_in.write("51858645")
json_out_var = cur.var(cx_Oracle.DB_TYPE_CLOB)
message_var = cur.var(cx_Oracle.DB_TYPE_CLOB)
status_var = cur.var(str)
cur.callproc(json_in, json_out, message, status)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2020-07-10
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多