好的,所以我连接到python 2.7中的oracle数据库和针对即时客户端11.2编译的cx_Oracle 5.1。我有一个光标到数据库并且运行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')
完美无缺。绑定该变量有什么问题?
答案 0 :(得分:2)
在您的示例中,test.test_trigger
不是变量,而是对象。您只能绑定变量(可以用值替换)。
您尝试运行的查询在逻辑上等同于:
ALTER TRIGGER 'test.test_trigger' DISABLE
在这种情况下绑定不起作用,您必须动态构建查询。
答案 1 :(得分:0)
您通常无法在Oracle中绑定对象名称。对于变量,它将起作用,但不适用于trigger_names,table_names等。