2011-08-24 51 views
1

好吧,所以我連接到python 2.7和cx_Oracle 5.1中的oracle數據庫,針對即時客戶端11.2編譯。我有一個光標到數據庫並運行SQL不是一個問題,但這樣的:Python中的cx_Oracle異常綁定變量

 

    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') 

工作perf ectly。綁定該變量有什麼問題?

回答

2

在你的例子中test.test_trigger不是一個變量,而是一個對象。您只能綁定變量(可以用值替換)。

您嘗試運行將是邏輯上等同於查詢:

ALTER TRIGGER 'test.test_trigger' DISABLE 

在這種情況下是行不通的綁定,你必須動態地建立查詢。

+0

您的回答更好! – Ben

+0

啊,好的。它會將其標記爲一個字符串。謝謝您的幫助 –

0

通常您不能在Oracle中綁定對象名稱。對於變量它可以工作,但不適用於trigger_names,table_names等。