2016-11-14 7 views
1

기존 저장 프로 시저를 호출하려고하지만 명명 된 매개 변수를 사용하면 첫 번째 매개 변수는 기본값 (이 경우 NULL)을 유지해야합니다.파이썬에서 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

어떻게 할 절차와 동일한 순서로 입력과 출력의 목록이 반환? –