【发布时间】:2020-04-17 11:50:51
【问题描述】:
使用 Oracle,我需要允许另一个事务查看未提交的数据或在更改它的事务未成功完成时将回滚的数据。
我们来看例子:
安排
CREATE TABLE Car
(
Name VARCHAR(20) NOT NULL,
Building NUMBER(1) NOT NULL
);
INSERT INTO Car (Name, Building) VALUES ('Car 1', 0);
行动
连接 1
UPDATE Car SET Building = 1 WHERE Name = 'Car 1';
连接 2
SELECT * FROM Car;
结果:
Name Building
===================
'Car 1' | 1
|
--Should be able to view the new Building value (1/true) from CONNECTION1 before
--the CONNECTION1 transaction be commited.
连接 1
--Do a lot of work to build the car (20seconds), then sets the Building flag to 0 and commits the transaction.
在 SQL Server 的 CONNECTION2 上使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED 可以达到,但在 Oracle 中不行,它没有这个选项。
我需要提供最终用户查看汽车是否已制造,并且我需要确保在汽车制造过程中发生某些故障(如能源故障),建筑标志返回 0/false。
【问题讨论】:
-
这是一个非常奇怪的要求。你真正想做什么?为什么不立即提交
update? -
标签: c# sql sql-server oracle concurrency