1

好的,所以我已连接到针对即时客户端 11.2 编译的 python 2.7 和 cx_Oracle 5.1 中的 Oracle 数据库。我有一个指向数据库的游标,运行 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 的错误:

    回溯(最近一次通话最后):
      文件“connect.py”,第 257 行,在
        cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE',
                    schema_trigger_name='test.test_trigger')
    cx_Oracle.DatabaseError: ORA-01036: 非法变量名称/编号

在跑步的时候:

    cursor.execute('ALTER TRIGGER test.test_trigger DISABLE')

完美运行。绑定该变量有什么问题?

4

2 回答 2

2

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

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

ALTER TRIGGER 'test.test_trigger' DISABLE

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

于 2011-08-24T11:39:47.090 回答
0

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

于 2011-08-24T11:40:55.843 回答