我需要从 Django 中的 API 调用 PL/SQL 中的过程。我使用 callproc 和正确的值,但得到错误:
“PLS-00306:调用中的参数数量或类型错误”
在甲骨文我有:
PROCEDURE new_payment(pv_id IN VARCHAR2,
parr_user IN OWA.vc_arr,
parr_date_reg IN OWA.vc_arr,
parr_d_value IN OWA.vc_arr,
parr_descr IN OWA.vc_arr,
parr_type IN OWA.vc_arr,
pi_gerar_ref_mb IN PLS_INTEGER DEFAULT 0,
pv_data_limite_ref_mb IN VARCHAR2 DEFAULT NULL)
在models.py中我有:
class PAYMENT():
def new_payment(self, id, user, date_reg, value, descr, type):
cur = connection.cursor()
ref = cur.callproc("PAYMENT.new_payment", [id, user, date_reg, value,
descr, type])
cursor.close()
return ref
在views.py中:
pay=PAYMENT()
x=pay.new_payment('123', '111', '2019-07-23', '10', 'test1', 'teste2')
此时,我收到错误消息:
“ORA-06550:第 1 行,第 7 列:PLS-00306:调用‘NEW_PAYMENT’时参数的数量或类型错误”`
关于我做错了什么的任何提示?
OWA.vc_arr
看起来像一个集合,所以你需要将一个集合作为变量传递。在cx_Oracle
文档中,您可以找到该功能Cursor.arrayvar(dataType, value\[, size\])
创建一个与给定类型和大小的游标关联的数组变量,并返回一个变量对象。该值要么是一个整数,指定要分配的元素数,要么是一个列表,分配的元素数是从列表的大小中得出的。如果值是一个列表,变量也设置为列表的内容。如果未指定大小且类型为字符串或二进制,则分配 4000 个字节。这是将数组传递给 PL/SQL(在列表可能为空且无法自动确定类型的情况下)或从 PL/SQL 返回数组时需要的。
所以你的代码可能看起来像:
class PAYMENT():
def new_payment(self, id, user, date_reg, value, descr, type):
cur = connection.cursor()
u = cur.arrayvar(cx_Oracle.STRING,user)
ds = cur.arrayvar(cx_Oracle.STRING,date_reg)
v = cur.arrayvar(cx_Oracle.STRING,value)
d = cur.arrayvar(cx_Oracle.STRING,descr)
t = cur.arrayvar(cx_Oracle.STRING,type)
ref = cur.callproc("PAYMENT.new_payment", [id, u, ds, v,
d, t])
cursor.close()
return ref
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句