[英]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.