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

时间:2015-08-27 18:19:33

标签: python oracle cx-oracle

Oracle和Python的新手。 我在Oracle数据库中有一个API,它有一个函数Part_Exist,它检查一个部件是否存在,并返回1表示true,0表示false:

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

我已经尝试过格式化输入,没有运气。我之前使用过cursor.callproc,效果很好。投入赞赏!

1 个答案:

答案 0 :(得分:0)

在这里找到答案: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()