Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用cx\U Oracle在Python3.4中调用Oracle API函数?_Python_Oracle_Cx Oracle - Fatal编程技术网

如何使用cx\U Oracle在Python3.4中调用Oracle API函数?

如何使用cx\U Oracle在Python3.4中调用Oracle API函数?,python,oracle,cx-oracle,Python,Oracle,Cx Oracle,Oracle和Python都是新手。 我在Oracle数据库中有一个API,它有一个函数Part_Exist,该函数检查一个Part是否存在,并返回1表示true,0表示false: FUNCTION Part_Exist ( contract_ IN VARCHAR2, part_no_ IN VARCHAR2 ) RETURN NUMBER IS BEGIN IF Check_Exist___(contract_, part_no_) TH

Oracle和Python都是新手。 我在Oracle数据库中有一个API,它有一个函数Part_Exist,该函数检查一个Part是否存在,并返回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,结果很好。感谢您的投入

在这里找到了答案:

基本上我必须使用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()