Переменные привязки исключений с cx_Oracle в Python

Итак, я подключен к базе данных oracle в python 2.7 и cx_Oracle 5.1, скомпилированной для мгновенного клиента 11.2. У меня есть курсор в базе данных, и запуск SQL не является проблемой, за исключением следующего:


    cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE',
                     schema_trigger_name='test.test_trigger')

or


    cursor.prepare('ALTER TRIGGER :schema_trigger_name DISABLE')
    cursor.execute(None,{'schema_trigger_name': 'test.test_trigger'})

оба приводят к ошибке от oracle:


    Traceback (most recent call last):
      File "connect.py", line 257, in 
        cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE',
                    schema_trigger_name='test.test_trigger')
    cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

Во время пробежки:


    cursor.execute('ALTER TRIGGER test.test_trigger DISABLE')

работает отлично. В чем проблема с привязкой этой переменной?


person kriberg    schedule 24.08.2011    source источник


Ответы (2)


В вашем примере test.test_trigger - это не переменная, а объект. Вы можете связывать только переменные (которые могут быть заменены значением).

Запрос, который вы пытаетесь выполнить, будет логически эквивалентен:

ALTER TRIGGER 'test.test_trigger' DISABLE

Привязка в этом случае не сработает, вам придется строить запрос динамически.

person Vincent Malgrat    schedule 24.08.2011

Обычно вы не можете привязать имя объекта в Oracle. Для переменных это будет работать, но не для trigger_names, table_names и т. Д.

person Ben    schedule 24.08.2011