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

1 投票
2 回答
1362 浏览
提问于 2025-04-17 00:15

好的,我现在在用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

在这种情况下,绑定是行不通的,你需要动态构建这个查询。

撰写回答