使用TpFIBTransaction组件,我试图启动一个读未承诺事务。
首先,TPBMode属性有3个可能的值:
在TpFIBTransaction.StartTransaction中,我看到设置tpbReadCommitted强制执行以下参数:
使用tpbRepeatableRead强制使用以下参数:
因此,拥有“自定义”事务参数的唯一方法似乎是设置tpbDefault值。
TrParams属性允许的值如下(来自fib.pas单元)
TPBConstantNames: array[1..isc_tpb_last_tpb_constant] of String = (
'consistency',
'concurrency',
'shared',
'protected',
'exclusive',
'wait',
'nowait',
'read',
'write',
'lock_read',
'lock_write',
'verb_time',
'commit_time',
'ignore_limbo',
'read_committed',
'autocommit',
'rec_version',
'no_rec_version',
'restart_requests',
'no_auto_undo',
'no_savepoint'
);我尝试只添加“read”值,但似乎仍然无法读取未提交的数据,即使TrParams属性中没有“TrParams”。
MyTransaction.TrParams.Clear();
MyTransaction.TrParams.Add('read');TPBConstantNames中是否缺少一些值(如果存在,类似于'read_uncommitted‘),还是有其他方法来设置Firebird“读未提交”事务?
发布于 2022-07-29 08:29:45
这是不可能的,因为Firebird不支持读未组合的隔离级别。
您可以在文档文档中找到以下信息
备注 读未提交隔离级别是读提交的同义词,并且只为语法兼容性而提供。它提供与读提交完全相同的语义,并且不允许您查看其他事务的未提交更改。
以及:
Firebird支持的三个隔离级别是: 快照 快照表稳定性 使用两个规范提交的READ (没有RECORD_VERSION和RECORD_VERSION)
https://stackoverflow.com/questions/73162888
复制相似问题