XA_END 函数用于取消当前会话与 xid 指定的事务分支的关联。

当控制线程完成或需要暂停事务分支上的事务时,事务管理器将调用 XA_END,当应用程序部分或全部完成其工作时(例如,在阻止某个事件以使其他控制线程在分支上工作的操作之前),将调用 XA_ENDXA_END 成功返回值后,控制调用线程不再与分支有效关联,但分支仍然存在。

语法

  1. DBMS_XA.XA_END (
  2. xid IN DBMS_XA_XID,
  3. flag IN PLS_INTEGER)
  4. RETURN PLS_INTEGER;

参数解释

参数

解释

xid

请参见 DBMS_XA_XID 对象类型

flag

请参见 XA_START 函数和 XA_END 函数的 flag 字段中使用的常量。

返回值

请参见 DBMS_XA 可能的常量返回值

可能返回的错误码是:XAER_RMERR, XAER_RMFAILED, XAER_NOTA, XAER_INVAL, XAER_PROTO 或 XA_RB*。

使用说明

  • 可以在 flag 中指定 TMSUCCESSTMSUSPEND,如果返回值为 XA_OK,则事务分支与当前处于分离状态的会话解除关联。不支持 TMFAIL。可以使用 TMSUCCESSTMSUSPEND 调用 XA_END,以将 xid 标识的事务分支与当前会话解除关联。

  • 如果 XA_END 执行成功,则返回 XA_OK。应用程序必须检查返回值并处理错误情况。仅当返回 XA_OK时,应用程序才应继续进行其他正常操作。

  • 在调用 XA_END 前执行 ROLLBACK 语句将回滚当前事务所做的更改。但是,在调用 XA_END 之前,事务上下文仍与当前会话关联。

  • 在调用 XA_END 前执行 COMMIT 语句将报错 ORA-02089:从属会话中不允许 COMMIT

  • 在 XA_END 之后执行 COMMITROLLBACK 语句对 xid 标识的事务没有影响,因为该事务不再与当前会话相关联。提交事务 ID 或 XA_ROLLBACK 函数来提交/回退 xid 指定的事务。