在 Informix 中,从过程中,我如何知道调用者是否从事务中调用我。
没有任何特别简单的方法可以做到这一点。 本质上,您必须尝试启动交易并查看是否出现错误。
例如,这个存储过程确定事务状态。 请记住,Informix 支持事务不可用的无日志数据库。
CREATE PROCEDURE tx_state() RETURNING VARCHAR(14);
DEFINE errcode INTEGER;
ON EXCEPTION IN (-256, -535) SET errcode
IF errcode = -256 THEN
RETURN "TX-Unavailable";
ELIF errcode = -535 THEN
RETURN "In-TX";
END IF;
END EXCEPTION
BEGIN WORK;
ROLLBACK WORK;
RETURN "No-TX";
END PROCEDURE;
如果您处于事务内部并且想要进行更改,但可以选择仅回滚更改,则可以使用 SAVEPOINT,然后 release 它,或 rollback 到保存点。