【问题标题】:oracle in out pl sql package in python procedure call errororacle in out pl sql package in python过程调用错误
【发布时间】:2021-04-04 11:54:09
【问题描述】:

这是pl/sql代码:

CREATE OR REPLACE PACKAGE SALES_PHARMA_19.PKG_DIL_ABCD
IS
   TYPE DIL10001_REC IS RECORD
   (
      DILCOLM_01   NUMBER,
      DILCOLM_02   NUMBER,
      DILCOLM_03   NUMBER,
      DILCOLM_04   NUMBER
   );

   TYPE RC_DIL_10001 IS REF CURSOR
      RETURN DIL10001_REC;

   TYPE DIL10001_TAB IS TABLE OF DIL10001_REC
      INDEX BY BINARY_INTEGER;

   PROCEDURE PRC_DIL10001 (P_REF_DIL001   IN OUT RC_DIL_10001,
                           P_PERREQ_BY    IN     NUMBER,
                           P_UD_REQ_BY    IN     VARCHAR2,
                           P_DESIGCODE    IN     VARCHAR2--,
                     --      P_SFRMST_DT  IN     DATE,
                     --      P_SENDTO_DT  IN     DATE
                     );
                          
END;
/

这是包的主体:

PROCEDURE PRC_DIL10001 (P_REF_DIL001   IN OUT RC_DIL_10001,
                       P_PERREQ_BY    IN     NUMBER,
                       P_UD_REQ_BY    IN     VARCHAR2,
                       P_DESIGCODE    IN     VARCHAR2--,
                 --      P_SFRMST_DT    IN     DATE,
                 --      P_SENDTO_DT    IN     DATE
                 )
IS
BEGIN
  OPEN P_REF_DIL001 FOR
     SELECT 4 DILCOLM_01,
            2 DILCOLM_02,
            1 DILCOLM_03,
            1 DILCOLM_04
       FROM DUAL;
END;

这是我的 Python 代码:

def data(request):
userpwd = "__"
connection = cx_Oracle.connect("user", userpwd, "192.168.0.1:1501/orcl")
curs = connection.cursor()
record = curs.arrayvar(cx_Oracle.NUMBER, [1, 2, 3, 4])
t = [0, '1', '2']

k = curs.callproc("PKG_DIL_ABCD.PRC_DIL10001", [record, t])

for i in record.getvalue():
    print(i)

这是给定的错误:

NotSupportedError at /data/
element 1 value is not the same type as previous elements
Request Method:   GET
Request URL:  http://127.0.0.1:8000/data/
Django Version:   3.1.3
Exception Type:   NotSupportedError
Exception Value:  
element 1 value is not the same type as previous elements
Exception Location:   D:\s h o w n o k\Practice_Project\oracle_api\o_api\myapp\views.py, line 31, in data
Python Executable:    C:\Users\ATI\AppData\Local\Programs\Python\Python37-32\python.exe
Python Version:   3.7.2

【问题讨论】:

  • 审查:为了完整起见,您可以提出“这个错误的原因是什么”的问题,但另一方面,这很明显......我认为这个 Q 是可以的。
  • “元素值与先前元素的类型不同”:您的代码中是否有一个列表,其中并非所有值都具有相同的类型?
  • 你能通过添加包的正文来编辑问题吗..?

标签: python oracle plsql cx-oracle


【解决方案1】:

在你的代码中你有这个:

t = [0, '1', '2']

请注意,第一个元素是整数,其余元素是字符串。它们必须属于同一类型。

另外,记录必须按照this sample所示处理。

【讨论】:

  • 在编辑到 t=[0, 1, 2] 后,它给了我这个错误:ORA-06550:第 1 行,第 7 列:PLS-00306:错误数量或类型的参数调用' PRC_DIL10001' ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略
  • 查看答案中的其他信息——记录的处理方式与数组不同。
猜你喜欢
  • 2015-12-14
  • 1970-01-01
  • 2014-08-13
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2022-01-05
  • 2012-04-18
相关资源
最近更新 更多