在Python中使用cx_Oracle绑定变量时的异常
好的,我现在在用Python 2.7和cx_Oracle 5.1连接一个Oracle数据库,这个版本是基于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')
这个是完全没问题的。那绑定这个变量到底是什么问题呢?
2 个回答
0
在Oracle中,通常你不能给一个对象起名字。对于变量来说是可以的,但对于触发器名称、表名称等就不行。
2
在你的例子中,test.test_trigger
不是一个变量,而是一个对象。你只能绑定那些可以被值替代的变量。
你想运行的查询在逻辑上等同于:
ALTER TRIGGER 'test.test_trigger' DISABLE
在这种情况下,绑定是行不通的,你需要动态构建这个查询。