加入 IBM i (AS/400) 上的逻辑文件

问题描述 投票:0回答:3

我看到很多关于多格式逻辑的参考。我需要的是这样的东西。以下内容是否在逻辑文件中完成?如果是的话,是哪一种逻辑文件?这是连接逻辑规范,但未编译。

另外,如果有更现代的方法来做到这一点,我很乐意学习。这两个文件使用的是PF。我们想要的只是从 ICBLDTIR 获得一组记录,其中仅具有位置 = PICK,但该数据仅位于该位置主机中。在现场 LMLTPC。

R PALREC                  JFILE(ICLOCMLM ICBLDTIR) 
               CPD7989-*    
                          JOIN(ICLOCMLM ICBLDTIR)     
                          JFLD(LMLOC1 IRLOC1) 
               CPD7486-*        
                          JFLD(LMLOC2 IRLOC2)    
               CPD7486-*     
                          JFLD(LMLOC3 IRLOC3)
               CPD7486-*         
  IRLOC1                                                
  IRLOC2                                                
  IRLOC3                                                
  LMLTPC                                                
S LMLTPC                    COMP(EQ 'PICK')

它收到这些错误:

* CPD7486      20        3      Message . . . . :   Keyword specified at incorrect level.           
* CPD7989      30        1      Message . . . . :   Number of join specifications not valid.
ibm-midrange
3个回答
3
投票

我相信你想要一个加入逻辑文件:

A     R MYREC          JFILE(FILEA FILEB)
A     J                JOIN(FILEA FILEB)
A                      JFLD(LOCATION1A LOCATION1B)
A                      JFLD(LOCATION2A LOCATION2B)
A                      JFLD(LOCATION3A LOCATION3B)
A       LOCATION1B
A       LOCATION2B
A       LOCATION3B
A     S WAREHSTYP      COMP(EQ 'PICK')

更多信息可以在IBM 网站找到。


2
投票

您在问题中所描述的不是我们所说的多格式逻辑。您的程序读取的每条记录都将返回相同的格式,称为 MYREC,无论单一格式是由两个文件组成。

虽然联接逻辑可能是一两年前推荐的解决方案,但 DDS 通常不是您应该关注的方向。 IBM 专注于通过 SQL 提高性能和功能。 SQL 可以为您提供更多功能、更好的整体性能,并提高您的工作效率。

SQL 为您提供了多种方式来交付您所寻求的内容。最接近您的连接逻辑文件的解决方案是连接逻辑视图。

CREATE VIEW myview AS
  SELECT irloc1, irloc2, irloc3
    FROM icbldtir
    JOIN iclocmlm   ON  lmloc1 = irloc1
                    and lmloc2 = irloc2
                    and lmloc3 = irloc3
                    and lmltpc = 'PICK' 

或者您可以将 SELECT 语句放入带有嵌入式 SQL 的程序中。

为了有效地完成此连接,您需要确保通过三个位置字段对每个物理文件(即表)有一个键控访问路径(即索引)。如果没有,用 SQL 来做就很简单了。

CREATE INDEX myfile_idx1
          ON myfile      (field1, field2, field3)

现在有些人可能会说,那又怎样?我们在这里所做的一切本质上与连接逻辑文件相同。但是,您不仅可以让优化器为您工作,而且您还可以向它伸出援手。在现阶段,无论使用哪种方法,系统都必须从每个文件中读取一条记录才能创建每个结果记录。它必须首先读取索引条目,然后获取索引引用的记录。但是假设我们可以只读取索引而不必实际读取记录本身呢?这会加快速度。而且系统通常可以在内存页上容纳更多索引条目,从而提供额外的速度优势。那么我们该怎么做呢?那么,如果索引包含优化器所需的所有信息,那么它将使用仅索引访问。所以我们所要做的就是将我们的附加字段放在索引上。我们不需要它作为排序字段,因此我们只需将其附加为附加字段即可。

CREATE INDEX iclocmlm_i2
          ON iclocmlm    (lmloc1, lmloc2, lmloc3)
      RCDFMT iclocmlmr2  ADD lmltpc

0
投票

使用左连接创建 LF 并在主文件上进行选择 JDFTVAL
DYNSLT
R JINRECD JFILE(I151PRDDTF/TAP00501 - I151PRDDTF/TAP02001)
J加入(TAP00501 TAP02001)
JFLD(DHBANK DHBANK)
JFLD(DHTYP DHTYP)
JFLD(DHACCT DHACCT)
JFLD(DHDATE DHDATE)
JFLD(DHNBR DHNBR)
DH银行JREF(1)
DHTYP JREF(1)
DHACCT JREF(1)
DHDATE JREF(1)
DHNBR JREF(1)

              DHEFF                     JREF(1)   
              DHRVFG                    JREF(1)   
              DHDRCR                    JREF(1)   
              DHITC                     JREF(1)   
              DHAMT                     JREF(1)   
              DHDSCA                    JREF(1)   
              DHSER                     JREF(1)   
              DHTLTR                    JREF(1)   
                                                  
              DHDSC1                    JREF(2)   
              DHDSC2                    JREF(2)   
              DHDSC3                    JREF(2)   
            K DHBANK                              
            K DHTYP                               
            K DHACCT                                   
            K DHDATE                                   
            K DHNBR                                    
            S DHRVFG                    COMP(EQ ' ')   
            S DHDRCR                    COMP(NE ' ')   
            S DHDSCA                    COMP(EQ 1)     
© www.soinside.com 2019 - 2024. All rights reserved.