IBM Informix 设置隔离级别的默认值是多少

what is the default value for IBM Informix set isolation level

1个存储过程

create procedure sp_count_demo(
i_user_id varchar(30)
)
returning p_count as num_of_row ;

define p_count integer ;

set isolation to dirty read ;

let p_row = 0 ;

select count(*)
into p_count
from some_table a
where a.user_id = i_user_id
;

return p_row;

end procedure ;

2 将从 java 个具有连接池

的 Web 应用程序调用 (1) 处的过程

3 在返回结果之前是否需要将隔离级别设置回之前的值? (即避免另一个进程重用具有 "dirty read" 隔离级别的连接)

4 默认隔离级别是什么

5 Where/How 我可以获取隔离级别的默认值吗

提前致谢

由于正在使用连接池,因此存储过程应return 将隔离级别设置为其先前的设置,以避免在另一个应用程序使用相同连接时出现意外结果。默认隔离级别取决于数据库的日志记录模式:

  • 对于未记录的数据库,它实际上是 "Dirty Read"(在 onstat -g ses 命令中显示为 NL)。
  • 对于模式 ANSI 数据库,它将是 "Repeatable Read."
  • 对于其他已记录的数据库,它将是 "Committed Read."

onconfig 参数 USELASTCOMMITTED 也可用于更改默认隔离级别的使用方式。有关更多信息,请访问知识中心(搜索 USELASTCOMMITTED)。

会话可以使用对 sysmaster 数据库的查询来找出其当前隔离级别。此查询在 Informix 12.10 上是 运行,但对于 11.70 应该也有效:

select tx.isolevel
from sysmaster:systxptab tx, sysmaster:sysrstcb r, sysmaster:sysscblst s
where s.address = r.scb and tx.owner = r.address
and s.sid = dbinfo("sessionid");

它 return 将隔离级别作为一个内部值作为整数 - 例如提交读取的值为 2。我不相信隔离级别到整数值的映射已发布,因此您将需要尝试为会话设置不同的级别,然后 运行 执行上述查询。