代码之家  ›  专栏  ›  技术社区  ›  user5247482

如何使用cx_Oracle在Python 3.4中调用Oracle API函数?

  •  0
  • user5247482  · 技术社区  · 9 年前

    Oracle和Python都是新手。 我在Oracle数据库中有一个API,它有一个函数Part_Exist,它检查一个部件是否存在,如果为真,则返回1,如果为假,则返回0:

    FUNCTION Part_Exist (
       contract_        IN  VARCHAR2,
       part_no_         IN  VARCHAR2 ) RETURN NUMBER
    IS
    BEGIN
       IF Check_Exist___(contract_, part_no_) THEN
          RETURN 1;
       ELSE
          RETURN 0;
       END IF;
    END Part_Exist;
    

    然后,我尝试使用cx_Oracle连接游标在Python中执行此函数:

    cursor.execute('INVENTORY_PART_API.PART_EXIST', ['100', '05945'])
    

    我试过了 cursor.callproc 但由于这是一个函数而不是一个过程,我想 cursor.execute 将是正确的。

    我一直在追踪:

    cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
    

    我尝试过格式化输入,但没有运气。我用过 游标.callproc 早一点,效果很好。欢迎输入!

    1 回复  |  直到 9 年前
        1
  •  0
  •   user5247482 user5247482    9 年前

    在这里找到答案: http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/

    基本上我必须使用 cursor.callfunc 而不是 .execute .callproc ...

            return_no = cursor.var(cx_Oracle.NUMBER)
            cursor.callfunc('INVENTORY_PART_API.Part_Exist', return_no, ['100', '05945'])
            number = return_no.getvalue()