请问如何解决这类锁表?~~~~~~

发布于 2022-08-19 06:13:11 字数 427 浏览 6 评论 9

请问如何解决这类锁表?

一个SQLRPGLE程序,

先用SQL语句从别的表中insert一些记录到一个表mytable1中,

SQL语句后面运行一段RPGLE语句,对表mytable1中的记录进行修改,
这时候发现报错表被锁,是执行的SQL语句把这个表锁住了吗?
如何解锁可以继续用RPGLE语句修改这个表的记录呢?

尝试了把这段RPGLE语句另生成一个独立的PGM,用一个总程序调用这两个程序,
第二个RPGLE语句程序仍然被锁报错。

以前用SQLRPGLE不多。

另外另一个问题,SQL语句执行的结果如何设置指示器之类捕捉呢?
如果出错了,就整个程序跳出报错,有捕捉办法嘛?

这里先行谢过!~~~~~~~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

渔村楼浪 2022-09-02 06:36:33

是吗?我就用一般的14,或15编译,还真没注意这个参数,谢谢

一杯敬自由 2022-09-02 05:04:02

SQLRPG程序会有提交控制的,如果不指明你的SQL语句提交控制级别,就默认是你当前作业的提交控制级别,比如你调用SQLRPG之前,启动了STRCMTCTL *CS,那么SQL的提交控制级别就是CS,那在你SQL提交数据之前你的记录都被你自己锁着。
    解决的办法是在SQL语句的后面加上WITH NC,这样的话你的SQL语句就关闭了提交控制——其他RPG程序还是在事务中的。如果其他程序错误导致要回滚数据的话,你的SQL提交的代码就回滚不了了。感觉这样的程序会不那么优雅,整个作业一部分在事务中,一部分不在事务中......所以还是建议你根据业务逻辑调整一下你的代码。

[ 本帖最后由 newbiezhang 于 2009-12-17 16:29 编辑 ]

何必那么矫情 2022-09-02 03:08:52

你的sqlrpgle程序是怎么编译的???如果编译sqlrpgle时将参数commit(*chg)改为commit(*none)就不会被sql加锁。。。!

最偏执的依靠 2022-09-02 03:08:31

这个方法我试验过,不行

人生百味 2022-09-01 08:20:56

谢谢各位!初步搞定!

把RPGLE语句放到了另一个程序,

第一个SQLRPGLE程序的SQL语句部分改写如下,

之前增加了CALL  QCMDEXC系统调用STRCMTCTL
SQL语句之后COMMIT,
然后系统调用ENDCMTCTL,
然后系统调用QSYS/RCLRSC LVL(*CALLER)
完毕,

主程序先调用SQLRPGLE程序,再调用RPGLE程序,
这把没锁表。

至于写到同一个程序里,没试验出来,没时间试验了。

这个办法是我查找软件系统的其他SQLRPGLE代码里,找到这段似乎是释放资源的,

就试验了一下,结果可以,

谢谢诸位!

恏ㄋ傷疤忘ㄋ疼 2022-08-29 13:06:40

SQLCOD是多少?

彼岸花似海 2022-08-25 17:10:33

是不是可以把文件定义KEYWOER--USROPN,执行完SQL 关了 --> 再开--->RPGLE   

我没试过。。

提笔书几行 2022-08-24 00:32:11

mytable1就是正常PF文件编译出来的表

梦在深巷 2022-08-23 04:46:59

mytable1是临时表吗?
SQL语句执行的结果可以用SQLCOD捕捉,不同的值表示不同的结果,出错可以GO 'ABEND'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文