zoukankan      html  css  js  c++  java
  • [转]oracle中使用set transaction设置事务属性

    本文转自:http://yedward.net/?id=24

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

    set transaction的语法如下:

    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给事务定义一个合适的回滚段,如下例子:

    SET TRANSACTION ISOLATION USE ROLLBACK SEGMENT segmentname;

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

    DECLARE
      l_name VARCHAR2(100);
      l_age  NUMBER;
      l_sex  VARCHAR2(2);
    BEGIN
      -- 为保证set transaction是事务的第一条语句,先使用commit或rollback来结束掉前面可能存在的事务
      COMMIT;
      -- 使用name给事务命名
      SET TRANSACTION READ ONLY NAME '查询报表';
      SELECT NAME
        INTO l_name
        FROM student
       WHERE student_id = 1001;
      SELECT age
        INTO l_age
        FROM student
       WHERE student_id = 1001;
      SELECT sex
        INTO l_sex
        FROM student
       WHERE student_id = 1001;
      -- 终止只读事务
      COMMIT;
      dbms_output.put_line('输出:' || l_name || l_age || l_sex);
    END;
  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/freeliver54/p/6049590.html
Copyright © 2011-2022 走看看