度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1302|回复: 3
打印 上一主题 下一主题

[分享] oracle中使用set transaction设置事务

[复制链接]

348

主题

3572

帖子

9333

积分

论坛元老

Rank: 8Rank: 8

积分
9333
跳转到指定楼层
楼主
发表于 2020-6-23 22:01:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

set transaction语句允许开始一个只读或者只写的事务,建立隔离级别或者是为当前的事务分配一个特定的回滚段。需要注意的是,set transaction必须是事务处理中的第一条语句,注意是事务处理的第一条语句,不是指代码的第一条语句,并且set transaction在一个事务中只能出现一次。

set transaction的语法如下:

  1. SET TRANSACTION parameter;
复制代码

parameter是用来指定参数的,其可用参数有如下几种类型:

(1)read only:表示建立只读事务,在此事务中只有select、select into、open、fetch、close、lock table、commit、rollback语句才允许出现,不可以执行insert、update、select for update等非法操作,对于这种事务模式不用指定回滚段。

(2)read write:建立读写事务,该事务既可读、也可写,oracle默认的事务就是这种类型。

(3)isolation level:用来设置事务的隔离级别,可以设置为serializable和read committed这两个选项。serializable会使得对已经修改但没有提交的数据对象的DML事务失败;read committed会使得对已经修改但没有提交的数据库对象的DML事务在进行修改时,会等待先前DML锁释放,这也是oracle默认的事务的隔离级别。

可以使用use rollback segment给事务定义一个合适的回滚段,如下例子:

  1. SET TRANSACTION ISOLATION USE ROLLBACK SEGMENT segmentname;
复制代码

一般在做报表查询的时候,可以先设置该查询事务为一个只读事务,以避免出现写操作,可以看下面这样的一个例子:

  1. DECLARE
  2.   l_name VARCHAR2(100);
  3.   l_age  NUMBER;
  4.   l_sex  VARCHAR2(2);
  5. BEGIN
  6.   -- 为保证set transaction是事务的第一条语句,先使用commit或rollback来结束掉前面可能存在的事务
  7.   COMMIT;
  8.   -- 使用name给事务命名
  9.   SET TRANSACTION READ ONLY NAME '查询报表';
  10.   SELECT NAME
  11.     INTO l_name
  12.     FROM student
  13.    WHERE student_id = 1001;
  14.   SELECT age
  15.     INTO l_age
  16.     FROM student
  17.    WHERE student_id = 1001;
  18.   SELECT sex
  19.     INTO l_sex
  20.     FROM student
  21.    WHERE student_id = 1001;
  22.   -- 终止只读事务
  23.   COMMIT;
  24.   dbms_output.put_line('输出:' || l_name || l_age || l_sex);
  25. END;
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
地板
发表于 2020-2-9 17:28:18 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-7-3 14:59:59 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
沙发
发表于 2020-7-3 14:58:51 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-27 13:30 , Processed in 0.198538 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表