cx_Oracle и выходные переменные

Я пытаюсь сделать это снова в базе данных Oracle 10:

cursor = connection.cursor()
lOutput = cursor.var(cx_Oracle.STRING)
cursor.execute("""
            BEGIN
                %(out)s := 'N';
            END;""",
            {'out' : lOutput})
print lOutput.value

но я получаю

DatabaseError: ORA-01036: illegal variable name/number

Можно ли таким образом определить блоки PL/SQL в cx_Oracle?


person Tim    schedule 23.04.2010    source источник


Ответы (1)


Да, вы можете делать анонимные блоки PL/SQL. Ваша переменная связывания для выходного параметра имеет неправильный формат. Должно быть :out вместо %(out)s

cursor = connection.cursor()
lOutput = cursor.var(cx_Oracle.STRING)
cursor.execute("""
            BEGIN
                :out := 'N';
            END;""",
            {'out' : lOutput})
print lOutput

Что производит вывод:

<cx_Oracle.STRING with value 'N'>
person Doug Porter    schedule 23.04.2010
comment
Большое спасибо... Я думал, что мы когда-то пробовали именно эту комбинацию, но, должно быть, мы ее пропустили! - person Tim; 23.04.2010
comment
Как я могу изменить его, если я использую cursor.callproc(SOME_PROC',[lOutput]) - person GSandro_Strongs; 08.04.2016