一个数据库锁方面的问题问题

Daniel22_cn Daniel22_cn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我现在有一段代码

string szOutput
string ValueData
ValueData = "Something"

select ColumnName into :szOutput
From TableName where ParmName = :ValueData;

IF (boolean)
-----code
else
---- code
end if

Update TableName Set Counter = Counter + 1
where paramname = :valuedata;

很多客户端会同时运行,这个时候则取值会出现问题,因此需要在此段代码访问的时候使用独占式访问。在定义Transaction Object的时候,Lock给的是RU,更改成如下代码后同时只能启动一个客户端,产生了数据库锁死,并且应用程序提交的数据库无法被正确保存(报告正确保存,但实际上没有)
更改后的代码如下:
string szSQL
szSQL = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE" --设置可串行化的隔离级别
Execute ...
szSQL = "begin tran"
Execute ...
select columnname from tablename where option=abc
//其他语句
update tablename set columnname = abc
szSQL = "commit tran"
Execute ...
szSQL = "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" --恢复默认的隔离级别
Execute...

请教,我怎么解决这个问题,如何给数据库正确锁,又能保证PB代码执行正确,并且可以同时启动多个实例。
...全文
评论 8
收藏 已收藏
分享
返回顶部
Daniel22_cn
脚本语言 743 成员 8,037 内容