1

リモートのMicrosoftSQLServer2005インスタンスからの読み取り/リモートへの書き込みのためのさまざまなメソッドを備えたABAPクラスがあります。

すべてが期待どおりに機能します。安全上の理由から、SELECTクエリにSQL Serverテーブルヒント(READPAST)を追加するようにアドバイスされました(デッドロックに対する対策となるはずです。SQLの専門家からはほど遠いです)。

悲しいことに、私はそれを機能させることができません。これは私のネイティブSQLブロックであり、そのまま機能します。

EXEC SQL.
  OPEN ritc FOR
    SELECT FIELD1,
           FIELD2,
           FIELD3,
           FROM MY_TABLE
           WHERE FIELD1 <= :lv_variable1
             AND FIELD3 =  :c_constant
ENDEXEC.

WITH(READPAST)の直後に追加しようとすると、次のFROM MY_TABLEエラーが発生します。READCOMMITTEDまたはREPEATABLEREAD分離レベルでのみREADPASTロックを指定できます

OPEN ritc十分に公平です:私は次の行の直前にこのコマンドを追加しようとしました:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

これにより、別のエラーが発生します。FETCHこのブロックの後の最初のコマンドで、カーソルritcが存在し、すでに開いているというエラーメッセージが表示されます。

この時点で、ネイティブSQLブロックにテーブルヒントを追加できるかどうかさえわかりませんか?

助言がありますか?前もって感謝します。

4

2 に答える 2

0

おそらく、BEGIN TRANSACTIONステートメントが必要でしたか?

(別のABAPブロックにEND TRANSACTIONステートメントも必要です。)

于 2010-11-04T16:22:32.220 に答える
0

SETはOPENの後に行う必要があると思います。

EXEC SQL.
  OPEN ritc FOR
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    SELECT FIELD1,
           FIELD2,
           FIELD3,
           FROM MY_TABLE WITH (READPAST)
           WHERE FIELD1 <= :lv_variable1
             AND FIELD3 =  :c_constant
ENDEXEC.
于 2010-11-04T18:21:08.373 に答える