同様のことを試してみたDBMS_TRANSACTION.LOCAL_TRANSACTION_ID
ところ、値が返されました9.7.1270
。トランザクションを名前で調べたところ、次のことがわかりました。
v$transaction.XIDUSN = 9
v$transaction.XIDSLOT = 7
v$transaction.XIDSQN = 1270
それらを組み合わせると、 が得られます9.7.1270
。したがって(これは間違っている可能性があることに注意してください-私が見つけたドキュメントはこれをカバーしていません)、次のように現在のトランザクション名を取得できる場合があります。
SELECT Name
FROM v$transaction
WHERE xidusn ||'.'|| xidslot ||'.'|| xidsqn = DBMS_TRANSACTION.LOCAL_TRANSACTION_ID;
私が確立できる 1 つの事実:v$transaction
次のいずれかを実行するまで、行は表示されません。
- INSERT/UPDATE/DELETE/MERGE タイプの操作、または
DBMS_TRANSACTION.LOCAL_TRANSACTION_ID
単独で呼び出します。つまり、上記のクエリにそれを含めるだけでは、v$transaction
行にデータを入力するのに十分ではないようです。
しかし、上記のいずれかを実行すると、クエリが機能し (現在 4 ~ 5 回テストしました)、トリガーで試すので、上記の項目 2 でカバーする必要があります。
最後v$transaction
に、アクセスはかなり制限されているため、ほとんどのユーザーは見ることができません。問題を複雑にしv$transaction
ているのは、実際のビューではありません。これはビューの同義語であるためsys.v_$transaction
(ドル記号の前のアンダースコアに注意してください)、許可するときに使用する必要がある名前です。SYSDBA
そして、付与を行うにはログインする必要があると確信しています-ユーザーv$transaction
としてクエリを実行できましたが、別のユーザーSYSTEM
に対して十分な権限がありませんでしたGRANT SELECT
。