Хорошо, поэтому я подключен к базе данных оракула в python 2.7 и cx_Oracle 5.1, скомпилированной против мгновенного клиента 11.2. У меня есть указатель на базу данных, и запуск SQL не является проблемой, за исключением этого:
cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE', schema_trigger_name='test.test_trigger')
или
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')
работает отлично. Какая проблема связана с привязкой этой переменной?
В вашем примере test.test_trigger
- это не переменная, а объект. Вы можете связывать только переменные (которые могут быть заменены значением).
Запрос, который вы пытаетесь запустить, будет логически эквивалентен:
ALTER TRIGGER 'test.test_trigger' DISABLE
Привязка в этом случае не будет работать, вам придется строить запрос динамически.
Обычно вы не можете привязывать имя объекта в Oracle. Для переменных он будет работать, но не для trigger_names, table_names и т.д.