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(1)中的过程将从具有连接池的java webapps中调用
3返回结果之前,我是否需要将隔离级别设置回先前的值? (即避免另一个进程重用该连接以使其具有“脏读”隔离级别)
4默认隔离级别是什么
5在哪里/如何获得隔离级别的默认值
预先感谢
答案 0 :(得分:2)
由于正在使用连接池,因此存储过程应将隔离级别返回到其先前的设置,以避免在另一个应用程序使用同一连接时出现意外结果。默认隔离级别取决于数据库的日志记录模式:
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");
它以内部值整数形式返回隔离级别-例如,提交的读取具有值2。我不认为隔离级别到整数值的映射已发布,因此您需要尝试设置不同的级别进行会话,然后运行上面的查询。