I/O 错误值

下表描述影响数据库、文件和 MQSeries® 消息队列的输入/输出(I/O)操作的 EGL 错误值。仅当系统变量 VGVar.handleHardIOErrors 设置为 1 时,与硬错误相关联的值才可供代码使用,如异常处理中所述。

错误值 错误类型 记录类型 错误值的含义
deadLock 硬错误 SQL 两个程序实例正尝试更改一条记录,但在系统不介入的情况下这两个程序都无法完成此操作。
duplicate 软错误 带索引记录或相对记录 代码尝试访问具有已存在的键的记录,并且尝试成功。有关详细信息,请参阅 duplicate
endOfFile 软错误 带索引记录、相对记录或串行记录 有关详细信息,请参阅 endOfFile
ioError 硬错误或软错误 任何 EGL 从 I/O 操作接收到非零返回码。
format 硬错误 任何 访问的文件与记录定义不兼容。有关详细信息,请参阅 format
fileNotAvailable 硬错误 任何 fileNotAvailable 对于任何 I/O 操作都是有可能的,例如,它可以指示另一个程序正在使用文件,或者访问文件所需的资源不足。
fileNotFound 硬错误 带索引记录、消息队列、相对记录或串行记录 找不到文件。
full 硬错误 带索引记录、相对记录或串行记录 在下列情况下将设置 full:
  • 索引文件或串行文件已满
hardIOError 硬错误 任何 发生硬错误,这是除 endOfFile、noRecordFound 或 duplicate 之外的任何错误。
noRecordFound 软错误 任何 有关详细信息,请参阅 noRecordFound
unique 硬错误 带索引记录、相对记录或 SQL 记录 UNQ 指示 unique:代码尝试添加或替换具有已存在的键的记录,该尝试失败。有关详细信息,请参阅 unique

duplicate

对于带索引记录或相对记录,在下列情况下将设置 duplicate
  • add 语句尝试插入一条记录,该记录的键或记录标识已存在于文件或备用索引中,并且插入成功。
  • replace 语句成功覆盖了记录,替换值包含与另一记录的备用索引键相同的键。
  • getget nextget previous 语句成功读取了记录(或者,表单 set record positionset 语句运行成功),第二条记录具有相同的键。

仅当访问方法返回了信息时才返回 duplicate 设置,对于一些操作系统来说,情况如此,而对于其它操作系统,情况并非如此。在 SQL 数据库访问期间,该选项不可用。

endOfFile

在下列情况下将设置 endOfFile
  • 当相关文件指针位于文件结尾时,代码对串行记录或相对记录发出 get next 语句。当上一个 getget next 语句访问了文件中的最后一条记录时,指针位于结尾。
  • 当相关文件指针位于文件结尾时,代码对带索引记录发出 get next 语句,在下列情况下会发生这种情况:
    • 上一个 getget next 语句访问了文件中的最后一条记录;或者
    • 当发生下列任何一种情况时,上一个类型为 set record positionset 语句访问了文件中的最后一条记录:
      • 键值与文件中最后一条记录的键相匹配;或者
      • 键值中的每个字节都被设置为十六进制 FF。(如果运行类型为 set record positionset 语句时指定了设置为只包含十六进制 FF 的键值,则该语句将位置指针设置到文件结尾。)
  • 当相关文件指针位于文件开头时,代码对带索引记录发出 get previous 语句,在下列情况下会发生这种情况:
    • 上一个 getget previous 语句访问了文件中的第一条记录;
    • 代码先前未访问同一个文件;或者
    • 运行类型为 set record positionset 语句时指定了一个键,在文件中,在该键前面没有其它键。
  • get next 语句尝试从空的或未初始化的文件中检索数据到带索引记录中。

    (空文件是其中所有记录均已被删除的文件。未初始化的文件是尚未对其添加任何记录的文件。)

  • get previous 语句尝试从空文件中检索数据到带索引记录中。

format

任何类型的 I/O 操作都会导致 format,设置此错误值的其中一些原因如下所示:
  • 记录格式

    文件格式(固定长度或可变长度)与 EGL 记录格式不同。

  • 记录长度

    对于定长记录,文件中记录的长度不同于 EGL 记录的长度。对于变长记录,文件中记录的长度大于 EGL 记录的长度。

  • 文件类型

    对记录指定的文件类型与运行时的文件类型不匹配。

  • 键长度

    文件中的键长度与 EGL 带索引记录中的键长度不同。

  • 键偏移

    文件中的键位置与 EGL 带索引记录中的键位置不同。

noRecordFound

在下列情况下将设置 noRecordFound:
  • 对于带索引记录,找不到与 get 语句中指定的键相匹配的记录。
  • 对于 EGL 生成的 Java™,当 VSAM 文件是空的或未经初始化时,代码对带索引记录发出 get nextget previous 语句。
  • 对于相对记录,找不到与 get 语句中指定的记录标识相匹配的记录。另一种情况是,get next 语句尝试访问位于文件末尾之后的记录。
  • 对于 SQL 记录,找不到与指定的 SELECT 语句相匹配的行;或者当没有剩余可供查看的所选行时遇到了 get next 语句。

unique

对于带索引记录或相对记录,在下列情况下将设置 unique
  • add 语句尝试插入一条记录,该记录的键或记录标识已存在于文件或备用索引中,并且插入由于重复而失败。
  • replace 语句由于替换值包含与另一记录的备用索引键相同的键而无法覆盖记录。

仅当访问方法返回了信息时才返回 unique 设置,对于一些操作系统来说,情况如此,而对于其它操作系统,情况并非如此。

在 SQL 数据库访问期间,当正在添加或替换的 SQL 行的键在唯一索引中已存在时,设置 unique。相应的 sqlcode 是 -803。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.