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

时间:2013-06-20 19:37:07

标签: ibm-midrange

我看到很多对多格式逻辑的引用。我需要的是这样的事情。以下是在逻辑文件中完成的吗?如果是这样的逻辑文件?这是连接逻辑规范,但它没有编译。

另外,如果有更现代的方法,我会很乐意学习。这两个文件都是PF。我们想要的只是拥有ICBLDTIR的一组记录,其中只有location = 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.

2 个答案:

答案 0 :(得分: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's site找到更多信息。

答案 1 :(得分: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