编写实地程序的一般准则

编写字段过程时必须考虑以下注意事项:

  • 必须是 ILE *PGM 对象。 不支持 *SRVPGM , OPM *PGM 和 JAVA 对象。
  • 当将字段过程添加至表时,检查对字段过程 *PGM 对象的权限。 调用字段过程时,不会执行权限检查。
    • 创建字段过程程序,以便它在创建该程序的用户的用户概要文件下运行。 这样,对程序没有同等权限的用户就不会迂到错误。
    • 创建具有 USRPRF (*OWNER) 和 *EXCLUDE 公共权限的程序。 不要将对字段过程程序的权限授予 USER (*PUBLIC)。 避免其他用户更改或替换字段过程程序。
  • 字段过程中不允许使用 SQL。
  • 如果要编码或解码的数据是空值,那么将不会调用字段过程。
  • 在编码操作上,在调用用户字段过程程序之前,压缩十进制和分区十进制值将转换为首选符号。
  • 字段过程必须是确定性的。 对于 SQE ,将根据 QAQQINI FIELDPROC_ENCODED_比较对结果进行高速缓存。
  • 字段过程必须具有并行能力,并且能够在多线程环境中运行。 对于 RPG ,这意味着必须指定 THREAD 控制规范关键字。 对于 COBOL ,这意味着必须指定 THREAD(SERIALIZE) 进程选项。
  • 必须能够同时在受防护环境和非受防护环境中运行。
  • 不能使用 ACTGRP (*NEW) 创建程序。 如果使用 ACTGRP (*CALLER) 创建程序,那么该程序将在缺省激活组中运行。
  • 字段过程程序应处于短时间运行状态。 建议现场过程程序避免落实控制和本机数据库操作。
  • 在物理文件的库中创建程序。
  • 如果发生错误或在字段过程程序中检测到错误,那么字段过程程序应设置 SQLSTATE 和消息文本参数。 如果未设置 SQLSTATE 参数以指示错误,那么数据库假定字段过程已成功运行。 这可能导致用户数据最终处于不一致状态。

警告: 字段过程是提供应用程序功能和管理信息的有效方法。 但是,字段过程程序可以为有偏差意图的人提供在系统上创建 "木马"1 的能力。 这就是为什么限制谁有权更改表的原因。 如果您正在仔细管理对象权限,那么典型用户将没有足够的权限来添加字段过程程序。

1 在历史上,木马是一匹大型空心木马,里面装满了希腊士兵。 马在特洛伊城墙内被引入后,士兵们从马中爬出,与特洛伊人作战。 在计算机世界中,一个隐藏破坏性功能的程序往往被称为木马。