在FILE-CONTROL节采用了FILE STATUS子句,则由其指定的2字节的字符型数据项记录文件操作的状态码,该状态码在执行EXCEPTION/ERROR声明或INVALID KEY/AT END子句前填写。其他状态由FILE STATUS从句中的data-name-8描述,它不能用于QSAM文件(OS/390、VM)以及行顺序文件(Workstation)。
+--------------------------------------------------------------------------+
|Table 32. 状态码码值和含义 |
+------------------+-------------------------------------------------------+
|高位数字含义 | 低位数字含义 |
+-----+------------+-----+-------------------------------------------------+
| 0 |成功结束 | 0 |无更多信息 |
| | +-----+-------------------------------------------------+
| | | 2 |仅适用于有允许重复值的替换索引的索引文件 |
| | | | |
| | | |输入输出语句正确执行,但发现了重复值. |
| | | |-对于READ语句,当前读出的关键字和下一个记录关键字 |
| | | | 相同. |
| | | |-对于REWRITE或WRITE语句,当前写入的记录与现有记录 |
| | | | 关键字重复. |
| | +-------------------------------------------------------+
| | | 4 |READ语句成功执行,但是读出的记录长度与文件描述不 |
| | | |一致. |
| | +-------------------------------------------------------+
| | | 5 |OPEN语句成功执行,但是用optional引用的文件不存在, |
| | | |文件模式为I-O或者EXTEND时,成功地建立了文件. |
| | | |对OS/390和VM VSAM顺序文件不适用. |
| | +-----+-------------------------------------------------+
| | | 7 |带NO REWIND,REEL/UNIT或FOR REMOVAL子句的CLOSE语句|
| | | |或带NO REWINDI子句的OPEN语句,引用的文件不在可反转|
| | | |媒介上. |
+-----+------------+-----+-------------------------------------------------+
| 1 |读写文件结束| 0 |顺序读文件遇到文件结束,没有逻辑记录. |
| |condition | |首次读optional文件,但是文件不存在. |
| | +-----+-------------------------------------------------+
| | | 4 |顺序读相对文件,但是相对记录号的标志数字大于相对码|
| | | |数据项的尺寸. |
+-----+------------+-----+-------------------------------------------------+
| 2 |无效码 | 1 |顺序存取索引文件存在次序(sequence)错. |
| | | |在一次READ成功后,REWRITE执行前,记录的主码被改变|
| | | |了,或者是下一个记录的主码不满足升序限制 |
| | | | |
| | | |对于OS/2 for Btrieve索引文件,状态21不可用。此时 |
| | | |可以码的任意次序顺序创建记录 |
| | +-----+-------------------------------------------------+
| | | 2 |写入记录将引起码值重复(相对文件) |
| | | |写入或者重写记录将导致主码或附属码重复,但在索引 |
| | | |文件中并没有DUPLICATES子句 |
| | +-----+-------------------------------------------------+
| | | 3 |试图随机访问文件中并不存在的记录,或试图对一个设 |
| | | |成optinal而不存在的输入文件进行START或READ |
| | +-----+-------------------------------------------------+
| | | 4 |写相对文件活或索引文件超出了外部定义的边界 |
| | | |或者试图对相对文件进行WRITE,但相对记录号中的 |
| | | |significant digits超过了定义的最大长度 |
+-----+------------+-----+-------------------------------------------------+
| 3 |Permanent | 0 | |
| |错误条件 +-----+-------------------------------------------------+
| | | 4 |边界冲突 |
| | | |写超出了外部定义的顺序文件边界 |
| | +-----+-------------------------------------------------+
| | | 5 |带有INPUT、I-O或EXTEND子句的OPEN语句试图访问一个 |
| | | |不存在的文件,而该文件没有设成optinal |
| | +-----+-------------------------------------------------+
| | | 7 |文件不支持OPEN语句指定的打开方式: |
| | | | |
| | | |1. 指定了EXTEND或OUTPUT子句,但文件不支持写操作 |
| | | |2. 指定了I-O子句,但文件不支持I-O操作 |
| | | |3. 指定了INPUT子句,但文件不允许读 |
| | +-----+-------------------------------------------------+
| | | 8 |试图OPEN一个已经带锁关闭的文件 |
| | +-----+-------------------------------------------------+
| | | 9 |OPEN语句失败——程序指定的文件属性与文件属性不同 |
| | | |这些属性包括:文件组织方式(顺序、相对、索引), |
| | | |主码,次码,字符集,最大纪录长度,记录类型(定长 |
| | | |或变长),块填充度等。 |
| | | | |
| | | |对于AIX、OS/2和Windows,状态39不适用于行顺序文件 |
| | | |或B树文件(line sequential files、Btrievefiles. |
+-----+------------+-----+-------------------------------------------------+
| 4 |逻辑错误 | 1 |试图打开已经打开的文件 |
| |condition | | |
| | +-----+-------------------------------------------------+
| | | 2 |试图关闭一个未打开的文件 |
| | | | |
| | +-----+-------------------------------------------------+
| | | 3 |对于大规模存储器上以顺序存取方式打开的文件来说, |
| | | |在执行REWRITE语句之前的IO语句不是一个成功的READ |
| | | |语句 |
| | | | |
| | | |对于以顺序存取方式打开的相对、索引文件来说, |
| | | |在执行REWRITE或DELETE语句之前的IO语句不是一个 |
| | | |成功的READ语句 |
| | +-----+-------------------------------------------------+
| | | 4 |边界冲突——试图重写REWRITE一个记录,但是记录长度|
| | | |不匹配。对于变长记录,可能是记录长度超过最小或最 |
| | | |大允许的长度 。 |
| | | |RECORD IS VARYING |
| | +-----+-------------------------------------------------+
| | | 6 |顺序读取一个以INPUT或I-O方式打开的文件,但是没有 |
| | | |下一个有效记录: |
| | | |1. 前一个READ语句失败,但是没有产生结束条件 |
| | | |2. 前一个READ语句产生了AT END条件 |
| | +-----+-------------------------------------------------+
| | | 7 |试图读取一个不是以INPUT或者I-O方式打开的文件 |
| | | | |
| | +-----+-------------------------------------------------+
| | | 8 |试图写一个不是以I-O、OUTPUT或EXTEND方式打开的文件|
| | | | |
| | +-----+-------------------------------------------------+
| | | 9 |试图删除或重写(DELETE or REWRITE)一个不是以I-O |
| | | |方式打开的文件 |
+-----+------------+-----+-------------------------------------------------+
|9 |实现者定义 | 0 | |
| |的条件 +-----+-------------------------------------------------+
| | | 1 |对VSAM文件(OS/390和VM): 文件口令错 |
| | | | |
| | | |在AIX、OS/2和Windows中: 权限不够 |
| | +-----+-------------------------------------------------+
| | | 2 |逻辑错误 |
| | +-----+-------------------------------------------------+
| | | 3 |除了QSAM文件外: 资源不可用 |
| | +-----+-------------------------------------------------+
| | | 4 |对VSAM文件(OS/390和VM下,带CMPR2编译选项): |
| | | |以顺序方式存取文件而没有文件位置指示 |
| | | | |
| | | |在AIX、OS/2和Windows中: 并发打开错误 |
| | +-----+-------------------------------------------------+
| | | 5 |除了QSAM文件以外: 无效或不完全的文件信息 |
| | +-----+-------------------------------------------------+
| | | 6 |对VSAM文件(限于OS/390和VM): 没有DD语句 |
| | | | |
| | | |对QSAM文件(限于OS/390和VM): 没有DD语句,并且 |
| | | |设置了CBLQDA(OFF) |
| | | | |
| | | |在AIX、OS/2和Windows中: 文件名错 |
| | +-----+-------------------------------------------------+
| | | 7 |对VSAM文件(限于OS/390和VM): OPEN执行成功,并 |
| | | |验证了文件完整性 |
| | | | |
| | | |在AIX、OS/2和Windows中: 访问远程文件出错 |
| | +-----+-------------------------------------------------+
| | | 8 |在AIX、OS/2和Windows中: 打开已经封锁的文件失败 |
| | | | |
| | +-----+-------------------------------------------------+
| | | 9 |在AIX、OS/2和Windows中: 访问已经封锁的记录失败 |
| | | | |
+-----+------------+-----+-------------------------------------------------+