同様のことを試してみた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。