使用Python

时间:2016-11-14 10:00:16

标签: python oracle cx-oracle

尝试调用现有存储过程,但使用命名参数时,第一个参数应保留默认值(在本例中为NULL)。

我花了太长时间试图让这个工作,任何想法?

create or replace procedure so_test(p1 in varchar2 default null, p2 in     varchar2  default null, p3 in varchar2  default null) as
begin
    null;
end;

import cx_Oracle
db = cx_Oracle.connect('/@XTS_DEV.CLIENT')
cur = db.cursor()
cur.callproc("so_test", ('X', 'Y', 'Z'))
cur.callproc("so_test(p2=>:1, p3=>:2)", ('Y', 'Z'))

Traceback (most recent call last):
  File "C:\Users\PatrickJolliffe\so_test.py", line 5, in <module>
    cur.callproc("so_test(p2=>:1, p3=>:2)", ('Y', 'Z'))
cx_Oracle.DatabaseError: ORA-06550: line 1, column 7:
PLS-00801: internal error [22503]
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1 个答案:

答案 0 :(得分:1)

文档(http://cx-oracle.readthedocs.io/en/latest/cursor.html#Cursor.callproc)涵盖了这一点,但由于没有提供示例,我可以看到这可能会让人感到困惑。 : - )

对于您的示例,这是您想要的:

cursor.callproc("so_test", keywordParameters = dict(p2 = "Y", p3 = "Z"))