首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在as400中创建连接逻辑文件

如何在as400中创建连接逻辑文件
EN

Stack Overflow用户
提问于 2015-05-17 00:41:05
回答 3查看 2.3K关注 0票数 0

我有一个包含偶数(2,4,6,8,10)和另一个包含奇数(1,3,5,7,9)的物理文件。我们可以创建连接逻辑文件,我必须在RPGLE pgm中使用它来按从(1到10)的顺序显示数字。

如何为该场景创建连接逻辑文件?

EN

回答 3

Stack Overflow用户

发布于 2015-05-18 11:18:07

FWiW,这是一个使用联合视图的示例,其容量与数据库认为不是“关系”的隐式多格式逻辑文件(MFLF)相同:

设置:

代码语言:javascript
运行
复制
create table even_nbrs
( nbr     dec     not null with default
, nbrtext char(2) not null with default
)
;
create table odd_nbrs
( nbr     dec     not null with default
, nbrtext char(2) not null with default
)
;
insert into  even_nbrs values      
(2, 2), (4, 4), (6, 6), (8, 8), (10, 10)
; -- 5 rows inserted in EVEN_NBRS
insert into  odd_nbrs  values           
(1, 1), (3, 3), (5, 5), (7, 7), ( 9,  9)
; -- 5 rows inserted in ODD_NBRS

创建从前两个文件生成数据记录的联合的文件:

代码语言:javascript
运行
复制
create view  evens_odds as      
( select nbr, nbrtext from even_nbrs
 union all                          
  select nbr, nbrtext from odd_nbrs 
)
;

将视图作为共享开放数据路径(ODP)提供给RPG程序,该路径的顺序是按编号序列(NBR)列排序的,用于运行时CL处理:

代码语言:javascript
运行
复制
ovrdbf     the_File tofile(evens_odds) mbr(*first) share(*yes)    
opnqryf    the_File keyfld((nbr))
/* optionally, the next three commands to test and review results: */
cpyfrmqryf the_File *print
dspsplf    qsysprt splnbr(*last)
posdbf     the_File *start
/* call the RPG program that could read by key or sequentially */
call       the_RPGpgm

并且,对于非关系型DDS LF,MFLF将具有以下DDS:

代码语言:javascript
运行
复制
                R ODDS_EVENS                PFILE(ODD_NBRS EVEN_NBRS)
                  NBR                                                
                  NBRTEXT                                            
                K NBR                                                

在使用该DDS源创建名为ODDS_EVENS的文件的创建逻辑文件(CRTLF)之后,以下CL请求可以验证结果:

代码语言:javascript
运行
复制
cpyf ODDS_EVENS *print fromrcd(*start)
dspsplf qsysprt splnbr(*last)

edit:18May2015

下面的DDS LF源是显式定义的MFLF,但第一个R-spec的第一个格式是重复的,即CRTLF之后在DSPFD类型(*RCDFMT)中看到的第二个格式是第一个格式的副本,并影响在PFILE()上指定的两个文件中的数据的联合。然而,第二和第三R-spec的第三和第四种格式是明确定义的,并且与第一种格式明显不同;第三和第四种格式之间的差异以及每种格式和第一种格式之间的差异应该被视为明显不同,以便表明它们不是联合,而是封装在单个*文件对象中的各种数据的有效不同的逻辑视图。

查看数据的最简单界面是使用Query/400交互式WRKQRY特性来选择指定文件选择中的不同格式,并在每次连续选择之后使用F5=Run特性。该实用程序的选择字段和序列字段,或仅显示文件字段说明(DSPFFD),以查看每种格式的布局。

这个示例并不试图执行任何有用的操作,只是试图强调联合和为该联合生成的多种格式,并展示如何将其他多种格式显式编码为不同的类似于视图的实体。

此外,除非在前面的file\data设置活动中的设置之后运行以下SQL语句,否则对RcdFmt(ODDS_ONLY)中的数据的引用将导致小数数据映射错误,因为最初作为从整数值映射的字符值输入的单位值为空格:update odd_nbrs set nbrtext = right(digits(nbr), 2)

代码语言:javascript
运行
复制
                R ODDS_EVENS                PFILE(ODD_NBRS EVEN_NBRS)           
                                            TEXT('NBR fld only; 1-digit values')
                  NBR  
                K NBR  
                K *NONE
                K *NONE
                S NBR                       COMP(LT 10)    
                R ODDS_ONLY                 PFILE(ODD_NBRS)
                                            TEXT('NBR,NBRTEXT mapped to zoned')
                  NBR                
                  NBRTEXT        2S00
                K NBR    
                K NBRTEXT
                K *NONE
                R EVENS_ONLY                PFILE(EVEN_NBRS)                    
                                            TEXT('NBR to alpha and more zoned')
                  NBR
                  NBR2S00        2S00       RENAME(NBR) COLHDG('NBR2S00')
                  NBR2A          2A  I      SST(NBR2S00 1 2) COLHDG('NBR2A')
                  NBRTEXT
                K *NONE  
                K *NONE  
                K NBR2S00

/edit:18May2015

票数 2
EN

Stack Overflow用户

发布于 2015-05-17 23:55:45

您没有描述联接逻辑,它将一个表中的记录联接到另一个表中的一个或多个记录。

相反,您要描述的是所谓的multi-format logical,其DDS源应该是这样的(假设文件之间的记录格式相同):

代码语言:javascript
运行
复制
A          R RECFMT                    PFILE(ODDFILE EVENFILE)
A            RECNO
A            FLD1
A            FLD2
A          K RECNO 

但是,如果这两个文件具有不同的记录格式,并且您想要来自each...then的不同字段,则如下所示:

代码语言:javascript
运行
复制
A          R ODDFILER                  PFILE(ODDFILE)
A            RECNO
A            FLD1
A            FLD3
A          K RECNO
A 
A          R EVENFILER                 PFILE(EVENFILE)
A            RECNO
A            FLD2
A            FLD4
A          K RECNO 

这里有一篇关于使用连接和多格式逻辑的不错的文章。http://www.mcpressonline.com/programming/general/multi-format-and-join-logicals.html

正如CRPence的答案所提到的,MFLF类似于SQL UNION ALL视图。

不同之处在于,在我的第二个示例中,MFLF允许FLD1是字母,而FLD2是数字。SQL联合视图不允许这样做;在SQL中选择的列必须具有相同(或兼容)类型。

票数 1
EN

Stack Overflow用户

发布于 2015-05-17 19:33:47

将每个物理文件看作一个网格或表,其中文件中的记录是行,文件中的字段是列。(这些也是SQL中使用的术语。)想象一下把两张桌子并排放在一起。连接将connext并在键匹配的地方将行组合在一起,以构建新的结果行,每个结果行都包含来自两个表的值。

但这根本不是你所描述的场景。您希望将这两张表垂直组合在一起,更像是将两堆卡片按所需的顺序排序成一堆。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30278230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档