簡體   English   中英

Python callproc 的 cx_Oracle 輸入/輸出變量

[英]Python cx_Oracle in/out variables for callproc

我有一個 oracle 過程應該返回 json 的塊。

該過程有 4 個參數

輸入是一個 ID 值 output json CLOB output json 格式的一些消息 CLOB output 如果成功或失敗 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM