python - 用于 callproc 的 Python cx_Oracle 输入/输出变量
问题描述
我有一个应该返回一大块 json 的 oracle 程序。
该过程有4个参数
input 是一个 ID 值 output 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并得到一个返回
解决方案
该程序正在等待
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)
推荐阅读
- azure-language-understanding - Luis:由于订阅密钥无效,访问被拒绝
- uwp - 为什么 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃?
- javascript - ReactJS 路由器 v4 Mobx - 路由器不会重新渲染组件?
- javascript - 仅在 IE11 上的 VUE JS 模板编译错误
- python - 如何将numpy数组转换为keras张量
- php - 数据未插入 laravel mysql
- laravel - Laravel Datatables 自定义选择搜索
- c++ - Qt QMessageBox 中心在桌面“关键”
- php - phpinfo() 将 display_errors 显示为关闭,尽管 php.ini 将其设置为 on 并且命令行 php -i 显示它已打开
- node.js - 带节点的领域侦听器