IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

VSE COBOL-读取备用索引时的文件状态46


IBM大型机论坛 -> COBOL程式设计
发表新话题   该主题已锁定:您无法编辑帖子或回复。
查看上一个主题 :: 查看下一个主题  
作者 信息
丹尼斯·拉森

新的用户


已加入:2020年1月3日
帖子:4
所在地:美国

发布发表:星期五一月03,2020 11:46下午
引用回复

我发现了一些关于状态46的帖子,但没有解决方案。我们是一家使用VSAM的VSE商店。 CICS在运行时和不在运行时都会发生此问题。状态代码为46终止的程序已经运行了好几年,没有发生任何事件。这些是只读的报告程序。我们使用备用密钥读取KSDS文件。当程序到达特定记录时,总是会出现此错误。关键是“会员编号,工作日期”。它会中止具有特定日期的特定ID。我知道它不是文件末尾,因为主文件按保存日期排序,并且有很多ID高于问题1,并且有很多记录的保存日期都在此记录之后。同样,对于使用第4键读取文件的2个报告,甚至都不需要导致问题的记录。当我尝试查看CICS中的问题记录时(我们有一个第三方工具来访问CICS,另一个在线工具也使用cics来允许您浏览编辑的VSAM文件。 CICS访问的第三部分-只是说“没有找到密钥的数据...。当我使用另一个应用程序使用主键查看记录时,该应用程序停在问题记录处,而不会前进到下一个记录。

这是文件:
码:
选择DET01文件   分配给SYS022-DA-3340-DETK4P       
                             索引组织     
                             访问模式是顺序的   
                             记录键是检测键       
                             文件状态为检测状态。 
FD  DET01-FILE                                     
   记录包含450个字符                 
   标签记录是标准的                     
   数据记录为DET-REC。                         
                                                   
01  DET-REC.                                       
    03  FILLER                      图十(300).     
    03  DET-KEY                     PIC X(13).     
    03  FILLER                      图十(137).     

执行B2000-MAINLINE到B2000-READ-NEXT             
                           直到DET01-KEY = HIGH-VALUES。   

R1000-READ-DET。                                           
                                                         
   将DET01-FILE读入DET01-RECORD                     
      在结束                                             
       将高值移动到DET01-KEY。                   
                                                         
   如果DET01-KEY NOT =高价值   (我在尝试调试时添加了这个)                     
   如果DET-STATUS ='00'或'02'                         
        下句                                     
       ELSE                                                 
       显示“问题DET读取-状态=” DET-STATUS 
           '** KEY ='DET01-KEY'*****'                   
        致电“中止”。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表于:星期六一月04,2020 12:47上午
引用回复

引用:
我们使用备用密钥读取KSDS文件。
是的,没错-如果是这样,那么SELECT中的ALTERNATE RECORD KEY子句在哪里?
引用:
我知道它不是文件末尾,因为主文件按保存日期排序,并且有很多ID高于问题1,并且有很多记录的保存日期都在此记录之后。
如果您正在按备用索引读取,则基本簇(而不是“ mainfile”)序列与备用索引的读取没有关系-即使基本簇不在末尾,也可以在备用键上获取文件结尾文件。

基本群集和备用索引的定义是什么?可能还需要其他信息,但由于您的帖子在多个地方相互矛盾,因此我们将从基础知识入手。
回到顶部
查看用户资料 发送私信
丹尼斯·拉森

新的用户


已加入:2020年1月3日
帖子:4
所在地:美国

发布发表:2020年1月6日星期一8:41 pm
引用回复

我很抱歉没有提供文件defs ...它们是...

主文件定义:
码:
/ * ***以下定义卡 **************************************** * /
 删除EMPLOYEE.DETAIL.FILE                                    -
   CLUSTER                                                        -
   PURGE                                                          -
   CATALOG(WPAS85)                                                 
   DEFINE 簇                                                 -
 ( NAME('EMPLOYEE.DETAIL.FILE')                                   -
   INDEXED                                                        -
   FREESPACE(0 0)                                                 -
   KEYS(53 36)                                                    -
   RECORDSIZE(450 450)                                            -
   NOREUSE                                                        -
   SHAREOPTIONS(4 3)                                              -
   NONSPANNED                                                     -
   TO(2099365)                                                    -
             )   / *集群结束* /                            -
          DATA                                                    -
 ( NAME(“ EMPLOYEE.DETAIL.DATA”)                                   -
   CYLINDERS(1300 30)                                             -
   VOLUMES( WPAS85  )                                             -
   CISZ(4096)                                                     -   
   SPEED                                                          -   
             )    /* END OF DATA */                               -   
          INDEX                                                   -   
 ( NAME('EMPLOYEE.DETAIL.INDEX')                                  -   
   CYLINDERS(5 1)                                              -     
   VOLUMES( WPAS85  )                                             -   
   CISZ(3584)                                                     -   
             )    /* END OF INDEX */                              -   
   CATALOG(WPAS85)                                                   


第一替代索引:
码:
/ * ***以下是AIX STUFF   ******************************************* * /
  定义 AIX                                                     - 
( NAME('EMPLOYEE.AIX.FILE')                                      - 
  涉及('EMPLOYEE.DETAIL.FILE')                                 - 
  可用空间(0 0)                                                 - 
  按键(41 48)                                                    - 
   RECORDSIZE(100 3148)                                           - 
   NOREUSE                                                        - 
   SHAREOPTIONS(4 3)                                              - 
   NONUNIQUEKEY                                                   - 
   UPGRADE                                                        - 
   TO(2099365)                                                    - 
             )    /* END OF AIX     */                            - 
          DATA                                                    - 
 ( NAME('EMPLOYEE.AIX.FILE.DATA')                                 - 
   CYLINDERS(300 10)                                              - 
   VOLUMES( WPAS85  )                                             - 
   CISZ(4096)                                                     - 
   SPEED                                                          - 
             )    /* END OF DATA */                               - 
          INDEX                                                   - 
 ( NAME('EMPLOYEE.AIX.FILE.INDEX')                                - 
   CYLINDERS(10 1)                                                 -
   VOLUMES( WPAS85  )                                             - 
   CISZ(3072)                                                     -   
             )    /* END OF INDEX */                              -   
   CATALOG(WPAS85)                                                   
   DEFINE  PATH                                                   -   
 ( NAME('EMPLOYEE.AIX.FILE.PATH')                                 -   
   PATHENTRY('EMPLOYEE.AIX.FILE')                                 -   
   UPDATE                                                         -   
             )    /* END OF PATH    */                            -   
   CATALOG(WPAS85)                                                   


第二个。指数:
码:
   DEFINE AIX                                                     -   
 ( NAME('EMPLOYEE.AIX3.FILE')                                     -   
   RELATE('EMPLOYEE.DETAIL.FILE')                                 -   
   FREESPACE(0 0)                                                 -   
   KEYS(13 300)                                                   -   
   RECORDSIZE(92 4138)                                            -   
   NOREUSE                                                        -   
   SHAREOPTIONS(4 3)                                              -   
   NONUNIQUEKEY                                                   -   
   UPGRADE                                                        - 
   TO(2099365)                                                    - 
             )    /* END OF AIX     */                            - 
          DATA                                                    - 
 ( NAME('EMPLOYEE.AIX3.FILE.DATA')                                - 
   CYLINDERS(220 10)                                              - 
   VOLUMES( WPAS85  )                                             - 
   CISZ(5632)                                                     - 
   SPEED                                                          - 
             )    /* END OF DATA */                               - 
          INDEX                                                   - 
 ( NAME('EMPLOYEE.AIX3.FILE.INDEX')                               - 
   CYLINDERS(10 1)                                                - 
   VOLUMES( WPAS85  )                                             - 
   CISZ(2048)                                                     - 
             )    /* END OF INDEX */                              - 
   CATALOG(WPAS85)                                                   
   DEFINE  PATH                                                   - 
 ( NAME('EMPLOYEE.AIX3.FILE.PATH')                                - 
   PATHENTRY('EMPLOYEE.AIX3.FILE')                                - 
   UPDATE                                                         - 
             )    /* END OF PATH    */                            - 
   CATALOG(WPAS85)                                                   


标准标签:
// DLBL DETK4P,'EMPLOYEE.AIX3.FILE.PATH',, VSAM,CAT = WPAS85


谢谢,
丹尼斯

为您编码
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:940
所在地:马里兰

发布发表:2020年1月6日星期一9:31 pm
引用回复

哪里
码:
代码标签???????
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2020年1月6日星期一9:36 pm
引用回复

您的VSAM定义没有任何意义-替代索引定义都不会包含整数个重复键。由于SELECT中没有ALTERNATE RECORD KEY语句,因此代码正在将您正在读取的替代索引视为主键。

由于您的程序不会将替代索引视为替代索引,因此建议您在读取后通过打印每个文件状态代码进行调试。文件状态代码为46,表示先前的读取未导致文件结束但未成功,或者先前的读取DID导致文件结束而程序仍尝试读取另一条记录-因此显示每个文件状态值会告诉您发生了哪些情况。我不赞成将READ / 在结束与IF混合使用<file-status>语句,因为很容易在代码中得到奇怪的行为。

而且,您应该使用代码标签来编写代码-操作起来容易得多。
回到顶部
查看用户资料 发送私信
丹尼斯·拉森

新的用户


已加入:2020年1月3日
帖子:4
所在地:美国

发布发表:2020年1月6日星期一9:36 pm
引用回复

不确定代码标签是什么意思?

我将文件定义为:
选择DET01-文件分配给SYS022-DA-3340-DETK4P

使用标准标签:
// DLBL DETK4P,'EMPLOYEE.AIX3.FILE.PATH',, VSAM,CAT = WPAS85

所以我正在按第三个键读取文件.....
在问题记录后,我可以使用3rd键开始读取文件。
并可以从第三个键的开头读取文件,直到获得“不良”记录为止,该记录的VSAM状态代码为46

谢谢
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2020年1月6日星期一9:42 pm
引用回复

当您单击“回复”按钮时,在主题主题的下面有一个“代码”按钮-使用它作为代码;否则,论坛软件会在不保留空格的情况下使每一行左对齐(这在代码中非常重要)。

而且,如果您使用的是备用索引,那么COBOL希望程序SELECT包含基本集群。因此,在没有该基本群集的情况下,您的程序可能会“运行”,但也有可能导致文件状态为46,因为您尚未按照COBOL标准对程序进行编码。
回到顶部
查看用户资料 发送私信
丹尼斯·拉森

新的用户


已加入:2020年1月3日
帖子:4
所在地:美国

发布发表:2020年1月6日星期一9:43 pm
引用回复

我可以研究在COBOL文件def中使用替代关键字。但是,我们商店中的所有程序都使用这种编码样式,并且以前从未遇到过问题。至于在每次读取后打印每个状态代码,我将假定以前的所有读取的状态均为00或02,因为此状态检查是在每次读取之后进行的,如果为其他任何值,我将显示状态并将其炸毁程序:

将DET01-FILE读入DET01-RECORD
在结束
将高值移动到DET01-KEY。

如果DET01-KEY NOT = HIGH-VALUES(我在尝试调试时添加了此值)
如果DET-STATUS ='00'或'02'
下句
其他
显示“问题DET读取-状态=” DET-STATUS
'** KEY ='DET01-KEY'*****'
致电“中止”。
回到顶部
查看用户资料 发送私信
罗伯特·桑普

全球主持人


已加入:2008年6月6日
帖子:8569
地点:美国爱荷华州迪比克

发布发表:2020年1月6日星期一11:12 pm
引用回复

从企业COBOL 语言参考 手册(46文件状态码上的6.3版的276页):
引用:
尝试对以输入或I-O模式打开的文件执行顺序READ语句,但由于以下原因未建立有效的下一条记录:
•前面的READ语句不成功,但没有导致结束条件。
•前面的READ语句导致结束条件。
您没有得到46文件的状态代码(在这种情况下,为什么要发布),或者您得到了46文件的状态代码,则符合《手册》中的两个条件之一。

由于您确定自己的代码是正确的,并且您不愿意执行合理的调试操作来帮助自己,因此主题已锁定。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   该主题已锁定:您无法编辑帖子或回复。 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> COBOL程式设计

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 比较两个文件以查找位置/日期... 同步排序 2
没有新帖 加载D ...时二级索引错误 IMS数据库/ DC 2
没有新帖 将文件从PD转换为显示... 同步排序 4
搜索我们的论坛:


回到顶部