如何获取导致触发的事务的 Oracle 事务 ID

Jak*_*son 4 sql oracle

假设我有一个名为“user”的表。我有一个触发器,它在插入“用户”表时触发。 有没有办法获取触发器内部插入的事务ID?

Raú*_*rez 7

您可以使用该功能 dbms_transaction.local_transaction_id

这是一个例子:(取自here

SELECT dbms_transaction.local_transaction_id
FROM dual;

CREATE TABLE t (
testcol NUMBER(3));

INSERT INTO t
VALUES (1);

SELECT dbms_transaction.local_transaction_id
FROM dual;

CREATE OR REPLACE FUNCTION atf RETURN VARCHAR2 IS
 PRAGMA AUTONOMOUS_TRANSACTION;
 x VARCHAR2(20);
BEGIN
  INSERT INTO t
  (testcol)
  VALUES
  (2);

  x := dbms_transaction.local_transaction_id;
  COMMIT;

  RETURN x;
END atf;
/

set serveroutput on

DECLARE
 x VARCHAR2(20);
BEGIN
  x := atf;
  dbms_output.put_line(x);

  INSERT INTO t VALUES (3);

  x := dbms_transaction.local_transaction_id;
  dbms_output.put_line(x);
  COMMIT;
END;
/
Run Code Online (Sandbox Code Playgroud)