使用 callproc 从 django 调用 PL/SQL 过程

趣味编码

我需要从 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用callproc的调用存储过程没有在PostgreSQL中实现吗?

来自分类Dev

从Java调用PLSQL过程

来自分类Dev

使用Knime调用存储过程

来自分类Dev

使用VBScript调用Outlook过程

来自分类Dev

使用VBA调用存储过程

来自分类Dev

使用VBScript调用Outlook过程

来自分类Dev

记录未使用 PLSQL 过程保存在表中

来自分类Dev

从Django调用Postgres SQL存储过程

来自分类Dev

PLSQL 过程逻辑

来自分类Dev

在PHP中调用过程时的PLSQL自定义数据类型

来自分类Dev

在PHP中调用过程时的PLSQL自定义数据类型

来自分类Dev

使用dblink和Java调用存储过程

来自分类Dev

如何使用JDBC调用PostgreSQL存储过程

来自分类Dev

在存储过程调用中使用默认参数

来自分类Dev

使用`With`语句的对象作为过程调用的参数

来自分类Dev

使用Dapper调用SQL存储过程

来自分类Dev

如何使用sqlalchemy调用存储过程

来自分类Dev

使用mysql递归调用的存储过程

来自分类Dev

如何使用TYPE RECORD调用过程?

来自分类Dev

使用Snowflake中的任务调用存储过程

来自分类Dev

使用mutext检测并调用已启动的过程

来自分类Dev

如何使用JDBC调用PostgreSQL存储过程

来自分类Dev

如何使用sqlalchemy调用存储过程

来自分类Dev

使用参数从.Net调用DocumentDb存储过程。

来自分类Dev

使用参数在Java中调用过程

来自分类Dev

phpmyadmin使用输入值存储过程调用

来自分类Dev

使用 Spring Data JPA 调用存储过程

来自分类Dev

C# - 使用类型调用存储过程

来自分类Dev

使用MFC中的异步过程调用中断Winsock接受调用