开发者社区> 问答> 正文

ORACLE:模拟读取未提交的行为

使用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

```js
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中则不能,它没有此选项。

我需要提供给最终用户以查看汽车是良性构建的,并且我需要确保在构建过程中是否发生了某些故障(例如能源故障),Building标志返回0 / false。

展开
收起
祖安文状元 2020-01-04 15:33:38 616 0
1 条回答
写回答
取消 提交回答
  • 我需要提供给最终用户以查看汽车是良性构建的,并且我需要确保在构建过程中是否发生了某些故障(例如能源故障),Building标志返回0 / false。

    除了(而不是使用)布尔标志,为什么不管理可能的状态列表,例如:

    0 -新 1 -进行中 2 -构建失败 3 -建立成功 这样,您就可以拥有用于处理构建的连接,以在流程的开始和结束时更新状态(并始终立即提交)。在另一个连接上,您可以跟踪项目的生命周期。

    2020-01-04 15:33:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载
迁移 ORACLE 最佳实践 立即下载

相关实验场景

更多

相关镜像