如何使用 cx_Oracle 在 Python 3.4 中调用 Oracle API 函数?
How do I call an Oracle API function in Python 3.4 using cx_Oracle?
Oracle 和 Python 都是新手。
我在 Oracle 数据库中有一个 API,它有一个函数 Part_Exist,它检查一个部分是否存在,returns 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
我试过以各种方式格式化输入,但没有成功。我之前用了cursor.callproc
,效果不错。输入赞赏!
在这里找到答案: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()
Oracle 和 Python 都是新手。 我在 Oracle 数据库中有一个 API,它有一个函数 Part_Exist,它检查一个部分是否存在,returns 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
我试过以各种方式格式化输入,但没有成功。我之前用了cursor.callproc
,效果不错。输入赞赏!
在这里找到答案: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()