在python中使用cx_Oracle绑定变量的异常

时间:2011-08-24 11:32:46

标签: python oracle cx-oracle

好的,所以我连接到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')

完美无缺。绑定该变量有什么问题?

2 个答案:

答案 0 :(得分:2)

在您的示例中,test.test_trigger不是变量,而是对象。您只能绑定变量(可以用值替换)。

您尝试运行的查询在逻辑上等同于:

ALTER TRIGGER 'test.test_trigger' DISABLE

在这种情况下绑定不起作用,您必须动态构建查询。

答案 1 :(得分:0)

您通常无法在Oracle中绑定对象名称。对于变量,它将起作用,但不适用于trigger_names,table_names等。