RPG中CHAIN操作默认检索顺序及转SQL一致性问询
RPG CHAIN操作的默认检索顺序与SQL对比问题
给定的RPG CHAIN操作代码
chain(e) (GetIacIsrKey.BaseKeyNumber: wNameKeyNumber: GetIacIsrKey.SocietyCode) IACISR001R IacIsrData;
文件声明
FIACISR001 IF E K DISK rename(IACISR:IACISR001R) usropn
转换后的SQL语句
SELECT * FROM IACISR WHERE BASEKEY = <VALUE> AND NAMEKEYNUMBER = <VALUE> AND SOCIETYCODE = <VALUE> FETCH FIRST ONLY ..
问题
已知该表通过SQL创建,主键为(BASEKEY,NAMEKEY,SOCCODE,LOCAFFNO),担心CHAIN与SELECT的检索顺序存在差异,询问:CHAIN操作默认的记录检索顺序是什么?
解答
RPG里的CHAIN操作严格遵循文件定义的键访问顺序来检索记录:
- 你的文件声明带
K关键字,说明是按键方式访问,对应表的主键(BASEKEY,NAMEKEY,SOCCODE,LOCAFFNO)就是CHAIN依赖的索引排序依据 - 当你用CHAIN指定前三个键值(BaseKeyNumber、wNameKeyNumber、SocietyCode)时,它会沿着主键索引的排序顺序,找到第一个匹配这三个条件的记录,顺序完全遵循主键定义的优先级:先匹配
BASEKEY,再NAMEKEY,接着SOCCODE,最后LOCAFFNO
而你写的无ORDER BY的SQL FETCH FIRST ONLY,返回的第一条记录顺序不固定,取决于数据库的执行计划;但CHAIN的检索顺序是固定的,完全由主键索引的排序逻辑决定。
内容的提问来源于stack exchange,提问作者MordernRPGSoldier
相关产品推荐
相关产品推荐

