sql - 调用程序的锁定问题

标签 sql ibm-midrange rpgle rpg

我有 50 个程序调用的 pgmA。pgmA 在输入模式下有详细文件。50 个调用程序中的一些在更新模式下有详细文件。根据新要求,我将在 PGMA 中以 XML 格式获取详细文件记录format..that needs to be breaked and updated..parsing is fine but I am worried about update detail file in PgmA because calling programs may locks record 而且我可能会遇到被同一份工作锁定的问题!分析这些程序也有点困难,因为它们多次调用 PgmA 并且代码庞大而陈旧..任何关于如何在没有锁定的情况下更新详细文件的建议...给我任何解决方案建议..

最佳答案

简短的回答是:如果不先锁定记录,就无法更新记录。

但是你可以调整你的锁定方案来最小化锁定的影响。您可能需要在调用 pgmA 的 50 个程序中执行此操作。方法是在没有锁的情况下读取要更新的记录,进行处理,然后在更新之前再次读取它,这次是带锁的。这样,如果您的处理长时间运行(通常需要用户输入),锁定时间就会最小化。

通常更新 ID 存储在每个记录中,它只是一个序列号,以帮助检测另一个进程在记录的第一次和第二次读取之间对记录所做的更改。检测这些变化的另一种方法是将记录存储在包含第一次读取的数据结构中,然后在更新之前将初始读取与第二次读取进行比较。

因此,通过 RLA 处理,它看起来像这样:

chain(n) (key:fields) file old;
if %found(file);
  // process record
  chain (key:fields) file new;
  if %found(file);
    if new <> old;
      // record changed between reads - reprocess
    else;
      // apply changes to new
      update record new;
    endif;
  else;
    // record deleted between reads - reprocess
  endif;
endif;

关于sql - 调用程序的锁定问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69517422/

相关文章:

svn - 您如何在 IBM i 上组织 RPGLE Subversion 存储库?

sql - 使用主键获取重复记录

php - PDO错误sql状态42000

使用 mkdir 过程 AS400/IBMi 在 IFS 中创建目录

sql - 使用 SQL 获取库中所有文件的行数

reflection - RPGle - 我希望我可以使用 RPGLe 做一些 'Reflection'

mysql - 从两个 INNER JOINS 更新

mysql - 如何将 mysql 查询转换为 microsoft sql 查询

ibm-midrange - 将过程(长名称)调用到变量中(不是免费的)

c++ - 从 C++ 调用 RPG 程序