1

さて、私はPython2.7のOracleデータベースとインスタントクライアント11.2に対してコンパイルされたcx_Oracle5.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からのエラーになります。

    トレースバック(最後の最後の呼び出し):
      ファイル"connect.py"、行257、
        cursor.execute('ALTER TRIGGER:schema_trigger_name DISABLE'、
                    schema_trigger_name ='test.test_trigger')
    cx_Oracle.DatabaseError:ORA-01036:変数name/numberが不正です

実行中:

    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 に答える