2016-11-14 8 views
1

既存のストアドプロシージャをコールしようとしましたが、名前付きパラメータを使用すると、最初のパラメータはデフォルト値(この場合はNULL)を保持する必要があります。PythonでOracleストアドプロシージャを使用した名前付きパラメータ

私は、このアイデアを得るにはあまりにも多くの時間を費やしましたか?

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

ドキュメント(http://cx-oracle.readthedocs.io/en/latest/cursor.html#Cursor.callproc)は、これをカバーしていますが何の例はありませんされているので、私はそれが混乱する可能性があるかを見ることができます。ご例えば:-)

が、これはあなたが望むものである:

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

どうでしょう手順と同じ順番で入力と出力のリストでこの戻り、? –

関連する問題