SQL 信息 ID
消息
说明
用户响应

SQL0000W

语句处理成功。 除非发生警告,否则 SQL 语句已成功执行。 检查 SQLWARN0 以确保它是空白。 如果为空白,那么语句已成功执行。 如果不是空白,那么存在警告条件。 检查其他警告指示符,以确定特定的警告条件。 例如,如果 SQLWARN1 非空白,那么字符串被截断。

sqlcode:0

sqlstate:00000、01003、01004、01503、01504、01506、01509 和 01517

SQL0001N

绑定或预编译未成功完成。 由于在先前消息中指定的原因,绑定或预编译请求不成功。

未创建程序包。

请参阅消息文件中的消息。 重新提交该命令。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

SQL0002N

绑定文件名无效。 由于在先前消息中指定的原因,绑定文件名不能按指定方式使用。

未创建程序包。

请参阅消息文件中的消息。 重新提交该命令。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

SQL0003N

数据库名称无效。 由于先前消息中指定的原因,不能按所指定方式使用数据库名称。

未创建程序包。

请参阅消息文件中的消息。 重新提交该命令。

SQL0004N

密码无效。 密码包含无效的字符,或密码太长。

未创建程序包。

重新提交该命令,并指定有效的密码。

SQL0005N

消息文件名无效。 由于在先前消息中指定的原因,不能按所指定方式使用消息文件名。

未创建程序包。

请参阅消息文件中的消息。 并检查消息文件的名称。 如果消息文件存在,那么检查它的属性。 重新提交该命令。

SQL0006N

日期时间格式参数无效。 日期时间格式参数的值不在有效范围 0 到 3 之内。

未创建程序包。

用有效的格式参数重新提交命令。

SQL0007N

由于该 SQL 语句中包含 SQL 语句中不受支持的字符,因此未处理该语句。 无效字符:字符。 无效字符之前的文本:文本 指定的字符不是 SQL 语句中的有效字符。 文本 运行时标记指示无效字符前的 SQL 语句的 20 个字符。

联合系统用户:某些数据源未向 字符 和 文本 运行时标记提供适当的值。 在这些情况下,character 和 text 将具有以下格式:“<data source>:UNKNOWN”,指示指定数据源的实际值未知。

移除或替换无效的字符,然后重新提交该语句。

sqlcode:-7

sqlstate:42601

SQL0008N

在主机变量声明中找到的标记 标记 无效。 主机变量声明中存在无效语法。 预编译器不能标识主机变量。

无法处理该语句。 语句中声明的主机变量(到分号为止)均不能接受。

检查主机变量声明的语法。

SQL0009W

忽略了覆盖预编译选项的尝试。 尝试覆盖预编译器选项。

忽略该选项。

确保正确指定了所有预编译器选项。

SQL0010N

以 字符串 开始的字符串常量没有字符串结束定界符。 语句包含一个以 字符串 开始而未正确终止的字符串常量。

无法处理该语句。

检查该语句中指示的字符串常量中是否缺少撇号。

sqlcode:-10

sqlstate:42603

SQL0011N

注释未终止。 注释未正确终止。

无法处理该语句。

检查该语句,以确定指示的注释中是否缺少或多出了注释定界符。

SQL0012W

 发生了无限制的相关。 命名列发生在一个 SELECT 语句中,未被显式地限制,并且发生在一个外部选择的 FROM 子句中所指定的表中。 因此,SELECT 语句中对该列的引用被当作外部引用,将产生相关。

假设相关是所期望的,处理该语句。

确保相关是所期望的。 最好显式限定期望的外部引用。

sqlcode:+12

sqlstate:01545

SQL0013N

空定界标识无效。 在预编译过程中,找到了指定为空字符串的游标名、语句名、数据库名称或者授权标识。 这是无效的。 无法处理该语句。 提供有效的游标名、语句名、数据库名称或授权标识。

SQL0014N

源文件名无效。 对预编译器的调用中指定的源文件名包含无效的字符,或指向源文件名的指针是无效的。

未创建任何程序包。

确保源文件名正确。

SQL0015N

主变量数据类型 标记-1 无效。 而应使用 标记-2 如果 WCHARTYPE CONVERT 预编译选项有效,那么必须用数据类型 ‘wchar_t’ 而不是 ‘sqldbchar’ 来声明图形主机变量。

如果 WCHARTYPE NOCONVERT 预编译选项有效(缺省值),且 ‘wchar_t’ 在此平台上被定义为 4 个字节的整数,那么必须用数据类型 ‘sqldbchar’ 而不是 ‘wchar_t’ 来声明图形主机变量。

用在消息中指定的数据类型替换主机变量的当前数据类型。

SQL0017N

必须在 SQL 函数或方法中指定和执行 RETURN 语句。 SQL 函数或方法不包含 RETURN 语句,或者函数或方法没有以执行 RETURN 语句来结束。 确保函数或方法执行了 RETURN 语句。

sqlcode:-17

sqlstate:42632

SQL0020W

已忽略以下列表中的绑定或预编译命令参数或参数值,因为它们不受目标数据库支持:参数名或值 可以通过预编译器来预编译已生成的绑定文件中存储的 SQL 语句,然后使用 BIND 命令在数据库中创建程序包。 可以使用 PRECOMPILE 命令在数据库中处理包含嵌入式 SQL 语句的应用程序源文件以及创建程序包。

在以下情况下,返回此警告:

  • 在 PRECOMPILE 命令或 BIND 命令中指定的一个或多个参数不受目标数据库服务器支持。
  • 在 PRECOMPILE 命令或 BIND 命令中指定的一个或多个参数的给定值不受目标数据库服务器支持。
在指定受目标数据库服务器支持的参数和值的情况下,再次执行 BIND 命令或 PRECOMPILE 命令。

SQL0021W

忽略无效的预编译器选项 选项 消息中所指定的选项是无效的预编译器选项。忽略该选项。 确保正确指定了所有预编译器选项。

SQL0022W

忽略重复的预编译器选项 选项 预编译器选项 选项 是重复的。

忽略该选项。

确保所有的预编译器选项仅指定过一次。

SQL0023N

数据库名称无效。 指定的数据库名称是无效的名称。

预编译终止。

确保正确拼写数据库名称并且遵循短标识规则。

SQL0024N

未指定数据库名称。 未提供进行预编译的数据库名称。

预编译终止。

提供数据库名称。

SQL0025W

绑定或预编译完成,且附带警告。 绑定或预编译成功,但发出警告。 程序包和/或绑定文件是按照命令中的请求而创建的。 请参阅消息文件中的消息。 如果有必要,请更正问题并重新提交命令。

SQL0026N

密码无效。 指定的密码是无效的密码。

预编译终止。

确保所提供的密码遵循有效密码的规则。

SQL0028C

绑定文件的发行版号无效。 绑定文件的发行版号与已安装的数据库管理器版本的发行版号不兼容。

该绑定文件不能配合当前的数据库管理器版本使用。 无法处理该命令。

如果可能,通过当前数据库管理器重复预编译进程。 否则,只能使用以兼容的数据库管理器发行版级别创建的绑定文件。

SQL0029N

需要 INTO 子句。 嵌入在应用程序中的非游标 SELECT 或 VALUES 语句必须有一个 INTO 子句来指示该语句的结果将要放置在何处。 动态 SELECT 语句不允许 INTO 子句。 将 INTO 子句添加至 SELECT 或 VALUES 语句并再次预编译应用程序。

sqlcode:-29

sqlstate:42601

SQL0030N

未指定源文件名。 未提供进行预编译的源文件名。

预编译终止。

指定源文件名。

SQL0031C

打不开文件 名称 文件 名称 是必需的,但打不开。

预编译终止。

确保指定的文件名正确且存在于文件系统中,并且文件许可权正确。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。 如果错误仍存在,那么重新安装数据库管理器后再安装样本数据库。

SQL0032C

无法使用文件 名称 当正在读或写文件 名称 时,遇到错误。

预编译终止。

再次尝试进行预编译。

SQL0033N

名称 是无效的绑定文件。 所指定的绑定文件 名称 不是绑定文件。

绑定终止。

确保指定了正确的文件名。

SQL0034N

未指定绑定文件名。 未指定进行绑定的绑定文件名。

绑定终止。

提供绑定文件名。

SQL0035N

打不开文件 名称 打不开消息文件 名称

已终止绑定或预编译。

确保系统可访问该文件。

SQL0036N

文件名 名称 的语法无效。 如果文件输入到预编译器,那么它必须具有所使用语言的正确扩展名。 如果文件输入到绑定程序,那么它必须具有扩展名 .bnd。 完全解析的文件名如果超过了平台最大长度也会导致此错误。

预编译或绑定终止。

确保指定的文件名正确。

SQL0037W

消息文件 名称 的语法无效。 对此功能而言,消息文件名 名称 在语法上不正确。

系统将输出重定向到标准输出设备。

确保指定的文件名正确。

SQL0038W

由于在将 DB2 提供的此列表文件绑定至 DB2/MVS、SQL/DS 或 OS/400 时需要绑定选项 SQLERROR CONTINUE,因此该选项已被激活。

当绑定 DB2 提供的下列列表文件时,需要 SQLERROR CONTINUE 绑定选项。

  • ddcsmvs.lst
  • ddcsvm.lst
  • ddcsvse.lst
  • ddcs400.lst

即使在绑定文件中存在有此选项认为无效的 SQL 语句,它也指示 DRDA 服务器创建程序包。 因为不是所有 DRDA 服务器都支持包含在 DB2 提供的绑定文件中的所有 SQL 语句,所以 SQLERROR CONTINUE 绑定选项必须用来保证为列表文件中的所有绑定文件创建程序包。

无需进行任何响应。 已为您指定了需要的绑定选项 SQLERROR CONTINUE。 为了避免将来接收到此警告,指定 SQLERROR CONTINUE 绑定选项。

SQL0039N

由于绑定文件无效,绑定程序未完成处理。 绑定程序不能处理该绑定文件。 绑定文件有可能由于绑定文件的内容被偶然地改变而无效。

不处理绑定文件。

如果可能,重复预编译进程以创建一个新绑定文件。 否则,获得绑定文件的新副本。

SQL0040N

列表 名称 中的一个或多个绑定文件上出错。 未绑定下列文件:列表 由于消息文件中先前的消息中指定的原因,一个或多个绑定文件未绑定。 未绑定文件列表由自 1 开始的数字组成,指示未绑定文件在列表文件中的相对位置。 名称 不包括列表文件的路径规范。

在消息中仅列示前 20 个错误绑定文件。 如果有多于 20 个错误的绑定文件,在列表中最后一个绑定文件名后插入省略号 (…)。

未创建一个或多个程序包。

请参阅消息文件中的消息。 检查列表文件以验证它是否包含有效名称。 重新提交该命令。

SQL0041N

没有尝试绑定列表 name 中文件号 number 后面的文件,因为出现了致命错误,处理已终止。 在绑定过程中遇到的某些错误被认为是致命的(即,系统错误和内存错误)。 如果在处理列表文件中的文件时发生这些错误中的其中一个,处理就会终止。 不会尝试绑定列表文件中的剩余文件。

当绑定列表中指定的绑定文件时发生这类错误。 注意,用于标识绑定文件的数字指示列表文件中文件的相对位置。

请参阅与此消息一起的其他消息来解决发生的错误。 重新提交该命令。

SQL0051N

保留单个程序的所有 SQL 语句所需的空间超出了它允许的最大值。 程序中的所有 SQL 语句需要的空间不能装入 SYSIBM.SYSPLAN 中的列 SECT_INFO。

预编译终止。

简化程序,或将程序分割成几个较小的独立程序,或者两项都进行。

SQL0053W

程序中未找到任何 SQL 语句。 指定的源文件不包含 SQL 语句。

如果正在绑定,那么将创建一个空程序包。

确保正在预编译或绑定正确的程序。

SQL0055N

源输入文件为空。 程序源输入文件不包含数据。

预编译终止。

确保指定了正确的输入文件。

SQL0056N

在嵌套复合语句中存在 SQLSTATE 或 SQLCODE 变量声明。 在 SQL 例程中,SQLSTATE 或 SQLCODE 变量声明处于嵌套复合语句中,而不是在最外面的复合语句中。

无法处理该语句。

仅在 SQL 例程最外面的复合语句中声明 SQLSTATE 和 SQLCODE 变量。

sqlcode:-56

sqlstate:42630

SQL0057N

SQL 函数或方法中的 RETURN 语句必须包括返回值。 RETURN 语句是在 SQL 函数或方法中指定的,无须指定要返回的值。

无法处理该语句。

在 RETURN 语句上指定一个值。

sqlcode:-57

sqlstate:42631

SQL0058N

SQL 过程中的 RETURN 语句值的数据类型必须是 INTEGER。 在 SQL 过程中,以数据类型不是 INTEGER 的值或表达式指定 RETURN 语句。

无法处理该语句。

在 RETURN 语句上指定一个具有 INTEGER 数据类型的值。

sqlcode:-58

sqlstate:428F2

SQL0060W

名称 预编译器正在进行中。 当预编译器开始处理时,此消息被写入标准输出设备。 标记 名称 指的是调用的特定语言预编译器。

继续处理。

不需要执行任何操作。

SQL0061W

绑定程序正在进行中。 当绑定程序开始处理时,此消息被写入标准输出设备。

继续处理。

不需要执行任何操作。

SQL0062W

启动文件 名称 的 INCLUDE。 遇到了一个 INCLUDE 语句。 预编译器现正在处理 INCLUDE 文件。 不需要执行任何操作。

SQL0063W

完成了文件 名称 的 INCLUDE。 预编译器已完成 INCLUDE 文件的处理。 将继续处理含有 INCLUDE 语句的文件。 不需要执行任何操作。

SQL0064N

文件 名称 直接或间接地包含它本身。 遇到了一个循环 INCLUDE。 预编译器输入文件不能 INCLUDE 自身,也不能被它所 INCLUDE 的文件 INCLUDE。

未 INCLUDE 指定的文件。

检查 INCLUDE 文件的嵌套,并移除任何循环。

SQL0065N

主机变量声明中遇到意外的行结束。 主机变量声明存在无效的语法。 在声明完成以前遇到行结束。

无法处理该语句。

检查主机变量声明的语法。

SQL0078N

必须为例程 例程名 指定参数名。 例程 例程名 未为所有参数指定参数名。 当用 LANGUAGE SQL 或 SQLMACRO 来定义例程时,所定义的每个参数都需要参数名。

无法处理该语句。

确保所定义的每个参数都包括参数名。

sqlcode:-78

sqlstate:42629

SQL0079N

声明的全局临时表或索引 名称 的“模式”名必须是 SESSION,而不是 模式名 声明的临时表或声明的全局临时表的索引的模式名 名称 必须是 SESSION。 该语句正在为声明的全局临时表或声明的全局临时表的索引指定模式名 模式名。 这是不允许的。

无法处理该语句。

用下列方法之一来更改语句:

  • 将模式名更改为 SESSION。
  • 移除模式名,并让 DB2 使用缺省值 SESSION。

sqlcode:-79

sqlstate:428EK

SQL0081N

在预编译/绑定过程中返回 SQLCODE sqlcode 在预编译或绑定程序时,从数据库管理器返回一个意外的 SQLCODE sqlcode

无法处理该语句。

检查 SQLCODE 以确定问题并采取适当的措施。

SQL0082C

发生错误,它终止了处理。 先前的非 SQL 错误导致了处理终止。

预编译/绑定/重新绑定终止。 未创建任何程序包。

更正导致先前错误的情况,并再次尝试执行该操作。

SQL0083C

内存分配出错。 在处理期间,没有足够的内存用来继续处理。

可能的解决方案包括:

  • 确保系统具有足够的实际内存和虚拟内存。
  • 移除后台进程。

如果在尝试建议的解决方案后仍然接收到此消息,请与 IBM 客户支持机构联系。

SQL0084N

EXECUTE IMMEDIATE 语句包含 SELECT 或 VALUES 语句。 SELECT 或 VALUES 语句在 EXECUTE IMMEDIATE 语句中使用。

无法处理该语句。

不支持隐含的功能。 准备 SELECT 或 VALUES 语句。 然后使用 OPEN、FETCH 和 CLOSE。

sqlcode:-84

sqlstate:42612

SQL0085N

已定义了语句名 名称 先前的 DECLARE 语句已经使用了当前 DECLARE 语句中指定的语句名称。

不处理当前的 DECLARE 语句。 先前的 DECLARE 语句仍使用该语句名。

对此语句使用另一个名称。

SQL0086C

内存分配出错。 在处理期间,没有足够的内存用来继续处理。

可能的解决方案包括:

  • 验证系统有必需的内存。
  • 移除后台进程。

SQL0087N

在不允许使用空值的上下文中指定了空值。 在变量不能为空值的上下文中使用了空值变量。 例如,可以在 OPEN 或 FETCH 语句中使用游标变量,但该游标变量的值不能为空值。 无法处理该语句。 请确保该变量的值在不允许使用空值的上下文中不为空,然后再试该请求。

sqlcode:-87

sqlstate:22004

SQL0088N

主机变量 名称 是有歧义的。 不能唯一地标识主变量 名称。 存在具有相同限定条件的多个主机变量。

无法处理该语句。

进一步限定该主机变量,或者,如果它已被完全限定,那么将它重命名。

SQL0089N

在找到 100 个错误后,结束处理。 在找到 100 个错误后,预编译器或绑定程序退出处理。 修正消息记录中指示的错误,并且重新提交该命令。

SQL0091W

预编译或绑定结束,具有 数值-1 个错误和 数值-2 个警告。 预编译或绑定终止,并有指明数目的警告和错误。

预编译或绑定终止。

如果发生了警告或错误,那么更正程序。如果有必要,请再次尝试进行预编译或绑定。

SQL0092N

因为先前的错误,未创建任何程序包。 因为先前的错误,未创建任何程序包。 更正错误,再次尝试进行预编译或绑定。

SQL0093N

在 EXEC SQL 语句终结符以前遇到输入结束。 当处理 SQL 语句时,在语句终止以前遇到源文件结束。

预编译终止。

确保 SQL 语句正确地终止。

SQL0094N

由于用户的中断请求,结束了绑定。 由于用户可能按下了中断键序列,绑定终止。

处理终止。 未创建程序包。

如果需要,重新提交绑定。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

SQL0095N

因为先前的错误,未创建任何绑定文件。 因为先前的错误,未创建任何绑定文件。

未创建任何绑定文件。

更正错误,并再次尝试进行预编译。

SQL0097N

在 SQL 例程中,不支持数据类型为 LONG VARCHAR 或 LONG VARGRAPHIC 的变量或参数。 SQL 例程(过程、函数或方法)不支持 LONG VARCHAR 或 LONG VARGRAPHIC 数据类型的变量或参数。 在 SQL 例程中,不要使用数据类型为 LONG VARCHAR 或 LONG VARGRAPHIC 的变量或参数。 对于 LONG VARCHAR,使用具有显式长度的 VARCHAR。 对于 LONG VARGRAPHIC,使用具有显式长度的 VARGRAPHIC。

sqlcode:-97

sqlstate:42601

SQL0100W

找不到进行 FETCH、UPDATE 或 DELETE 操作的行; 或者查询的结果是一个空表。

下列其中一个条件为真:

  • 找不到满足在 UPDATE 或 DELETE 语句中所指定搜索条件的行。
  • SELECT 语句的结果是一个空白表。
  • 当游标定位在结果表的最后一行之后时,执行一个 FETCH 语句。
  • 用在 INSERT 语句中的 SELECT 的结果为空。

未检索、更新或删除数据。

不需要执行任何操作。 处理可以继续。

sqlcode:+100

sqlstate:02000

SQL0101N

由于已达到内存限制、SQL 限制或数据库限制之类的限制,因此未处理语句。 在尝试准备或执行超出了内存限制、SQL 限制或数据库限制之类的限制的 SQL 语句时,可能会返回此消息。 在此上下文中,“内存限制”包括下列示例:

  • 语句堆 (STMTHEAP)
  • 应用程序堆 (APPLHEAPSZ)
  • 应用程序内存 (APPL_MEMORY)
  • 实例内存 (INSTANCE_MEMORY)
  • 其他进程或系统内存限制

例如,可能会由于下列原因而返回此消息:

  • 语句堆不够大,无法编译语句。 (SQL 或 XQuery 编译器在编译 SQL 或 XQuery 语句时,将语句堆用作工作空间。)
  • 没有足够的应用程序内存可用于处理应用程序请求。
  • 如果该语句是用于创建或修改压缩描述的语句,那么新的压缩描述对于系统目录中相应的列而言可能太大。

在尝试执行由于过于复杂而无法编译的 SQL 语句时,也可能会返回此消息。 例如,下列元素会导致语句的复杂性提高:

  • 约束,例如表检查约束或外键约束
  • 触发器
  • 行访问控制和列访问控制
联合环境:
在联合环境中,当语句超出联合服务器或联合数据源的限制时,可能会返回此消息。
代码页转换:
如果正在两个不同的代码页之间转换字符数据,那么当数据转换结果超出限制时,可能会返回此消息(即使原始数据未超出任何限制也是如此)。
通过执行下列一项或多项操作,对此错误作出响应:

  • 使用数据库配置参数 stmtheap 增大语句堆的大小,或者通过将 stmtheap 参数设置为 AUTOMATIC 允许语句堆自动增大。
  • 通过将数据库配置参数 appl_memory 设置为 AUTOMATIC,允许自动增加为应用程序请求分配的内存量。
  • 将该语句划分为更短或更为简单的 SQL 语句。
  • 通过进行下列一种或多种更改,降低该语句的复杂性:
    • 减少该语句所涉及的约束(例如表检查约束或外键约束)的数目。
    • 减少该语句所涉及的触发器数。
    • 减少该语句所涉及的行访问控制数或列访问控制数。
联合环境:
  1. 确定是联合数据源返回了错误还是联合服务器返回了错误。
  2. 执行上述一项或多项一般操作。 例如:
    • 如果此错误由联合服务器返回,请使用数据库配置参数 stmtheap 增大语句堆的大小,或者将 stmtheap 参数设置为 AUTOMATIC。
    • 简化该语句。

sqlcode:-101

sqlstate:54001

SQL0102N

以 字符串 开始的字符串常量太长。 发生了下列情况之一:

  • COMMENT ON 语句中的注释多于 254 字节。
  • SQL CONNECT 语句中指定的应用程序服务器名多于 18 字节。
  • 以 字符串 开始的字符串常量的长度大于 32672 字节。 长度大于 32672 字节的字符串或长度大于 16336 个字符的图形字符串只能通过从主机变量赋值来指定。 注意,DB2 产品系列中的其他服务器可能指定了不同的字符串大小限制。 有关详细信息,请查阅相应数据库产品的文档。
  • 在 XQuery 表达式中,以 字符串 开头的字符串文字的长度超过 32672 字节。 此限制是对使用 UTF-8 编码的字符串文字确定的。 要在 XQuery 表达式中指定长度超过 32672 字节的字符串,必须使用数据库中的 XML 值,并且必须通过访问数据的 XQuery 函数使用那些值,或者通过使用诸如 XMLQUERY、XMLEXISTS 或 XMLTABLE 之类的 SQL/XML 函数进行赋值的 XQuery 变量使用那些值。
  • 联合系统用户:传递会话中不能超过特定于数据源的限制。 例如,在传递会话中,如果将语句中包括超过 254 字节的字符文字发送给 DB2 OS/390 版,那么会导致此错误。
  • INGEST 命令中的作业标识字符串的长度超过 128 字节。
  • INGEST 命令中的字段定义中日期、时间或时间戳记格式字符串的长度超过其最大长度。 日期格式字符串的最大长度为 10 字节。 时间格式字符串的最大长度为 8 字节。 时间戳记格式字符串的最大长度为 32 字节。

可能是数据转换正在进行,而结果字符串太长。 对于运行于不同代码页下的应用程序和数据库之间的连接,字符串常量从应用程序代码页转换为数据库代码页。 在某些情况下,图形字符串常量可能被进一步从数据库代码页转换为 UCS-2(UNICODE)编码,例如当用 EUC 代码页创建了数据库时。 这意味着结果字符串有可能长于输入字符串。

无法处理该语句。

对于“表注释”或“列注释”,减小注释的大小。 对于 SQL CONNECT 语句,减小应用程序服务器名的长度。 对于其他字符串常量,请求的功能不是交互可用的。 对于在应用程序中嵌入的非 CONNECT SQL 语句上下文中发生的错误,将长串赋给主机变量,然后用该变量替代 SQL 语句中的字符串文字。

联合系统用户:对于传递会话,请确定导致该错误的数据源。 检查该数据源的 SQL 方言,以确定超出了哪个特定限制,并根据需要调整失败的语句。

Ingest 实用程序用户:指定少于 129 字节的 ingest 作业标识,或者指定不超过最大长度的格式字符串。

sqlcode:-102

sqlstate:54002

SQL0103N

数字文字 文字 无效。 所指示的 文字 以一个数字开始,但它是无效的整数、小数或浮点文字。

联合系统用户:在传递会话中发生了特定于数据源的文字表示错误。

无法处理该语句。

请更正无效的数字文字。联合系统用户:如果在传递会话中出错,请确定导致该错误的数据源。 检查该数据源的 SQL 方言,以确定违反了哪一条文字表示法规则,并根据需要调整失败的语句。

sqlcode:-103

sqlstate:42604

SQL0104N

在 text 之后发现一个意外的标记 token 。 预期标记可能包括:标记列表 在文本 文本 后面的指定标记处检测到 SQL 语句中或 SYSPROC.ADMIN_CMD 过程的输入命令字符串中的语法错误。 文本 字段指示无效标记前面的 SQL 语句中或 SYSPROC.ADMIN_CMD 过程的输入命令字符串的 20 个字符。

作为帮助,在 SQLCA 的 SQLERRM 字段中,提供了有效标记的部分列表作为 标记列表。 此列表假定语句直到该位置为止均正确。

以命令方式将文本传递至命令行处理器 (CLP),并且此文本包含的由操作系统 shell 解释的特殊字符(例如,单引号或双引号)未使用转义字符标识时,可能会返回此消息。

如果某个 SYSIBM 内置函数不支持显式将 SYSIBM 用作函数限定符,那么对该内置函数进行显式限定引用时,也可能返回此错误。

无法处理该语句。

通过下列其中一种方式对此错误作出响应:

  • 在指定的标记区域内检查并更正语句。
  • 如果您正通过命令方式使用 CLP 并且命令中存在特殊字符(例如,引号),请使用转义字符(例如,反斜杠字符)以使操作系统 shell 不会对这些特殊字符执行任何特殊操作。 还可通过交互方式或批处理方式使用 CLP 发出此语句,以避免操作系统 shell 对这些特殊字符进行任何处理。
  • 如果要将 SYSIBM 用作函数名的模式限定符,请确保函数支持使用此限定符。

sqlcode:-104

sqlstate:42601

SQL0105N

以 字符串 开始的字符串常量无效。 语句包含一个以无效 字符串 开始的字符串常量。

无法处理该语句。

指定字符串常量的正确格式。 检查图形字符串、成对的定界符以及该字符串中字节数是否为偶数。

sqlcode:-105

sqlstate:42604

SQL0106N

SQL 语句正确开始,但不完整。 在再也找不到输入之前,SQL 语句正确。 这可能是因无法正确结束文字导致的。 字符串文字需要结束引号。

此 SQL 语句的处理已结束。

检查该语句是否带有所有必需的部分来完成期望的功能,且是否所有子句都完整。

对于 PL/I:检查分号前面的 SQL 语句是否完整。 对于汇编程序:检查是否正确遵循了延续规则。 (列 72 中必须要有非空白字符,延续的行必须在列 16 或之后开始。)

对于 COBOL:检查 END-EXEC 前面的 SQL 语句是否完整。

sqlcode:-106

sqlstate:42601, 42603

SQL0107N

名称 名称 太长。 最大长度为 长度 返回的名称 名称 太长。 长度 指示了该类型的名称所允许的最大长度(以字节计)。 这不包括任何转义字符(如果存在)。

联合系统用户:如果是在传递会话中,那么可能已超出特定于数据源的限制。

无法处理该语句。

注意:在对运行于不同代码页下的应用程序和数据库执行字符数据转换时,会返回此错误,这是因为转换的结果超出长度限制。

请选择更短的名称或更正对象名的拼写。

联合系统用户:对于传递会话,请确定导致该错误的数据源。 检查该数据源的 SQL 方言,以确定超出了哪个特定限制,并根据需要调整失败的语句。

sqlcode:-107

sqlstate:42622, 10901

SQL0108N

名称 名称 的限定符数是错误的。 名称 名称 限定不正确。

在此上下文中,具有给定名称 名称 的对象只能有一个限定符。

一个列名被一个限定的或非限定的表名或者一个相关名所限定。 在某些上下文中,一个列名需要一个表名限定符。

ALTER MODULE 语句操作的模块对象的标识必须是未限定的单一部件名称。

无法处理该语句。

确保对象名称正确地限定。

sqlcode:-108

sqlstate:42601

SQL0109N

由于在不支持以下子句的上下文中使用此子句,因此未处理语句或命令:子句 当 SQL 语句或命令以不受支持的方式使用子句时,将返回此消息。

在许多不同的场景中,都有可能返回此消息。 以下是有可能返回此消息的一些场景示例:

  • 子查询、INSERT 语句或 CREATE VIEW 语句包含下列其中一个子句:INTO、ORDER BY 或 FOR UPDATE。
  • 将 RAISE_ERROR 函数用作选择列表项,但未将 RAISE_ERROR 函数的结果强制转换为适当的数据类型。
  • 在 XML 上下文中指定了子查询隔离或锁定请求子句。
  • 仅限于联合环境:在传递会话中,违反了特定于数据源的限制。
请从该语句或命令中移除该子句,然后重新提交该语句或重新运行该命令。

联合系统用户:
对于传递会话,执行以下故障诊断步骤:

  1. 确定引起错误的数据源。
  2. 检查该数据源的 SQL 方言,以确定违反了哪个特定限制。
  3. 根据需要调整失败的语句。
  4. 重新提交该语句,或者重新运行该命令。

sqlcode:-109

sqlstate:42601

SQL0110N

字符串 是无效的十六进制常数。

十六进制常数 字符串 无效。 问题为以下之一:

  • 指定了无效的十六进制数字。 只允许“0 到 9”、“A 到 F”及“a 到 f”。
  • 指定了非偶数位的十六进制数。
  • 指定了超过 8000 位的十六进制数。
更正该常量,并重新提交该语句。

sqlcode:-110

sqlstate:42606

SQL0111N

列函数 名称 不包括列名。 未正确指定列函数 名称 (AVG、MIN、MAX、SUM 或 COUNT(DISTINCT)) 的规范,因为这些函数在操作数中必须包括一个列名。

无法处理该语句。

指定作为列函数操作数的表达式中的列名。

注意:此错误仅适用于版本 2 之前的 DB2 发行版。

sqlcode:-111

sqlstate:42901

SQL0112N

列函数 名称 的操作数包括列函数、标量全查询或子查询。

列函数的操作数不能包括:

  • 列函数
  • 标量全查询
  • 子查询
  • XMLQUERY 或 XMLEXISTS 表达式(除非作为 XMLAGG 列函数的操作数)。

在 SELECT 列表中,算术运算符的操作数不能是包含 DISTINCT 关键字的列函数。

无法处理该语句。

更正列函数的使用以移除无效表达式,然后再次尝试。

sqlcode:-112

sqlstate:42607

SQL0113N

标识 中包含不允许的字符或不包含任何字符。 SQL 变量名、参数名、安全标号组件元素或条件名 标识 包含无效字符。

SQL 变量名、参数名和条件名中只允许包含对 SQL 普通标识有效的字符。 注意,因为标识是定界的,所以不执行折叠,并且大写和小写字母被认为是相互有别的。

安全标号组件元素中只允许包含对元素值有效的字符。

更正标识,并重新提交该语句。

sqlcode:-113

sqlstate:42601

SQL0117N

赋值数目与指定的或隐含的列数或变量数不一样。 在下列情况下,值的数目可能会不同:

  • 在 INSERT 语句值列表中的插入值的数目与指定的或隐含的列数不相同。 如果未指定列列表,那么会隐含包括表(那些隐式隐藏的表除外)或视图中所有列的列列表。
  • 在 SET 语句或 UPDATE 语句的 SET 子句中,赋值符号右边的值数目与左边的列数或变量数不匹配。

无法处理该语句。

请更正该语句以便为每一个指定的或隐含的列或变量指定值。

sqlcode:-117

sqlstate:42802

SQL0118N

作为 INSERT、DELETE 或 UPDATE 语句的目标的表或视图,在 FROM 子句中也被指定了。 指定为 INSERT、DELETE 或 UPDATE 语句的目标的表或视图在同一条语句中的子查询的 FROM 子句中也出现。

作为 INSERT、UPDATE 或 DELETE 目标的表或视图不能也被用来提供要插入的值,或用来限定将要插入、更新或删除的行。

无法处理该语句。

此消息仅适用于 1.2 和更早版本的服务器,以及通过 DB2 Connect 访问的主机。

不支持隐含的功能。 要尝试得到希望的结果,创建对象表或视图的临时副本并且将子查询传递给该副本。

sqlcode:-118

sqlstate:42902

SQL0119N

在 SELECT 子句、HAVING 子句 或 ORDER BY 子句中指定的以 表达式开头 开始的表达式未在 GROUP BY 子句中指定,或者它在 SELECT 子句、HAVING 子句或 ORDER BY 子句中,具有列函数,但未指定 GROUP BY 子句。

SELECT 语句有下列其中一种错误:

  • 标识的表达式和列函数包含在 SELECT 子句、HAVING 子句或 ORDER BY 子句中,但无 GROUP BY 子句
  • 标识的表达式包含在 SELECT 子句、HAVING 子句或 ORDER BY 子句中,但不在 GROUP BY 子句中。

标识的表达式是以 表达式开头 开始的表达式。 表达式可以是单个列名。

如果在 HAVING 子句中指定了 NODENUMBER 或 PARTITION 函数,那么认为基础表的所有分区键列都处在 HAVING 子句中。

无法处理该语句。

通过将表达式包括在 SELECT 子句、HAVING 子句或 ORDER BY 子句中的 GROUP BY 子句中,或通过从 SELECT 语句移除列函数来更正该语句。

sqlcode:-119

sqlstate:42803

SQL0120N

无效使用了聚集函数或 OLAP 函数。 只能在全查询的选择列表、having 子句或者在具有一定限制条件的 WHERE 子句或 GROUP BY 子句中使用聚集函数或 OLAP 函数。

仅当一个 WHERE 子句出现在 HAVING 子句的子查询中,并且聚集函数或 OLAP 函数的自变量是对一个组的相关引用时,此 WHERE 子句才能包含聚集函数或 OLAP 函数。

仅当聚集函数或 OLAP 函数的自变量是对子查询(不同于包含 GROUP BY 子句的子查询)中列的相关引用时,GROUP BY 子句才可包含聚集函数或 OLAP 函数。

不能在 XMLQUERY 或 XMLEXISTS 表达式的自变量列表中使用 OLAP 函数。

无法处理该语句。

更改语句以便不使用聚集函数或 OLAP 函数或仅在受支持的地方使用聚集函数或 OLAP 函数。

sqlcode:-120

sqlstate:42903

SQL0121N

在同一条 SQL 语句中多次为赋值指定了目标名称 名称 同一个目标名称 名称 被指定了多次:作为 CALL 语句的 OUT 或 INOUT 自变量、在 INSERT 语句的列的列表中、在 UPDATE 语句的 SET 子句中的赋值符号的左边或者在赋值语句的左边。 目标名称标识列、SQL 参数或变量。

注意,更新或插入视图(其中视图的多个列都基于基本表的同一列)时,可能会发生此错误。

无法处理该语句。

更正该语句的语法,使每个列名仅被指定一次。

sqlcode:-121

sqlstate:42701

SQL0122N

SELECT 语句中没有 GROUP BY 子句但在 SELECT 子句中包含有列名或表达式和列函数,或是列名或表达式包含在 SELECT 子句中,但不在 GROUP BY 子句中。 SELECT 语句有下列其中一种错误:

  • 列名或表达式和列函数包含在 SELECT 子句中,但没有 GROUP BY 子句。
  • 列名或表达式包含在 SELECT 子句中,但不在 GROUP BY 子句中。

该列或表达式可能包含在标量函数中。

如果在 SELECT 子句中指定了 DATAPARTITIONNUM、DBPARTITIONNUM、NODENUMBER、HASHEDVALUE 或 PARTITION 函数,那么基础表的所有数据库或表分区键列都被视为在 SELECT 子句中。

无法处理该语句。

通过将 SELECT 子句中的列或表达式包含在 GROUP BY 子句中,或者从 SELECT 子句中移除这些列或表达式来更正该语句。

sqlcode:-122

sqlstate:42803

SQL0123N

函数 n 中 name 位置的参数必须是常量、关键字、变量或常量或变量的转置。 函数 名称 中位置 n 处的参数不是期望的元素;该参数必须是下列其中一个元素:

  • 常量(如果要求该参数为常量)
  • 关键字(如果要求该参数为关键字)
  • 变量(如果要求该参数为变量)
  • 常量或变量的强制转型(如果要求该参数为常量或变量的强制转型)
确保函数的每个自变量都符合相应参数的定义。

sqlcode:-123

sqlstate:428I9 和 42601

SQL0125N

ORDER BY 或 GROUP BY 子句中的列号码小于 1,或者大于结果表中的列数。 语句中的 ORDER BY 或 GROUP BY 子句包含的列号小于 1 或大于结果表中的列数(SELECT 子句中的项数)。

无法处理该语句。

更正 ORDER BY 或 GROUP BY 子句的语法,使每个列标识正确地标识结果表中的列。

sqlcode:-125

sqlstate:42805

SQL0127N

多次指定 DISTINCT。

不能使用 DISTINCT 限定词:

  • 在 SELECT 子句和列函数中
  • 在同一个 SELECT 语句的两个或更多列函数中。

无法处理该语句。

此错误仅适用于版本 2 之前的 DB2 发行版,以及通过 DB2 Connect 访问的主机。

sqlcode:-127

sqlstate:42905

SQL0129N

语句包含太多表名。 SQL 语句包含太多表名。 单条 SQL 语句最多可以引用 255 个表。 此限制包括所引用的任何视图中的每个表。

无法处理该语句。

将 SQL 语句分为两个或多个带有 255 个或更少表引用的简单语句。

此消息适用于通过 DB2 Connect 访问的主机。

sqlcode:-129

sqlstate:54004

SQL0130N

ESCAPE 子句不是单个字符,或者模式字符串中转义字符的出现是无效的。 转义字符必须是单个字符,长度不超过 2 字节。 仅当它之后跟随其自身、百分号或下划线时,它才能出现在模式字符串中。 有关 LIKE 谓词上 ESCAPE 子句的更多信息,请参阅 SQL Reference 相应地更正模式字符串或者转义字符。

sqlcode:-130

sqlstate:22019, 22025

SQL0131N

LIKE 谓词的操作数有不兼容的数据类型。 如果 LIKE 或 NOT LIKE 左边的表达式是字符类型,那么右边的表达式必须是字符类型。

如果左边的表达式是图形类型,那么右边的表达式必须是图形类型。

如果左边的表达式是二进制字符串类型,那么右边的表达式必须是二进制字符串类型。

无法处理该语句。

将 LIKE 谓词的表达式更正为相同的数据类型。

sqlcode:-131

sqlstate:42818

SQL0132N

未处理语句,因为在 LIKE 谓词或标量函数需要字符串表达式的情况下对其指定了值。 对函数(例如,下列其中一个函数)指定了无效字符串表达式,会返回此消息:

  • LIKE 谓词
  • LOCATE 标量函数
  • POSITION 标量函数
  • POSSTR 标量函数
  • STRPOS 标量函数
在对每个函数指定有效操作数的情况下,再次发出语句。

sqlcode:-132

sqlstate:42824

SQL0134N

不正确地使用字符串列、主机变量、常量或函数 名称 不允许使用字符串 名称

下列各项中不允许生成 CLOB、DBCLOB、BLOB、LONG VARCHAR 或 LONG VARGRAPHIC 数据类型的表达式:

  • SELECT DISTINCT 语句
  • GROUP BY 子句
  • ORDER BY 子句
  • 带有 DISTINCT 的列函数
  • 除 UNION ALL 之外的集合运算符的 SELECT 或 VALUES 语句。

联合系统用户:在传递会话中,特定于数据源的限制可能会导致此错误。 请参阅 SQL Reference 文档,找到失败的数据源。

无法处理该语句。

不支持所请求的对字符串的操作。

sqlcode:-134

sqlstate:42907

SQL0135N

INSERT 语句或 UPDATE 语句中长串列的输入必须来自主机变量,或是关键字 NULL。 UPDATE 或 INSERT 正在使用常量、列名或子查询(但本来应该使用 NULL 或主机变量)。

长串列是 LONG VARCHAR、LONG VARGRAPHIC 或 VARCHAR(n),其中 n 大于 254 但小于或等于 32767,或是 VARGRAPHIC(n),其中 n 大于 127,但小于或等于 16383。

请参阅 DB2 for VM Application Programming 手册以了解有关使用长串的信息。 更正该语句。 再次尝试。

sqlcode:-135

sqlstate:56033

SQL0137N

操作 中所得到的长度大于 最大值 此操作生成的结果字符串的实际长度超过此操作的最大允许长度。

如果此操作为 CONCAT,那么并置给定操作数的结果比结果类型支持的长度长。

字符串结果限制在 32,700 字节以内(除非操作数之一是 CLOB,其限制为 2 千兆字节)。

图形字符串结果限制在 16350 个字符以内,除非操作数之一是 DBCLOB,这种情况下的限制为 1,073,741,823(少于 1 千兆字节)个双字节字符。

二进制字符串结果(操作数是 BLOB)限制为 2 千兆字节。

请参阅此操作的文档以确定结果字符串的生成方式以及操作的最大长度的确定方式。 考虑更改此操作的自变量是更改结果的长度还是最大长度。

如果此操作为 CONCAT,请确保这些操作数的长度之和未超过受支持最大长度并重试此操作。

sqlcode:-137

sqlstate:22001, 54006

SQL0138N

未执行此语句,因为标量函数的数字自变量超出范围。 如果对用于处理一个或多个字符串的标量函数指定了超出范围的数字自变量,那么会返回此消息。 这类函数的示例包括:

  • SUBSTR
  • SUBSTRING
  • LEFT
  • RIGHT
  • INSERT
  • OVERLAY

例如,SUBSTR 函数的第二个自变量指定字符串中的位置。 如果对该自变量指定的值小于 1 或大于字符串长度,那么会返回此消息。 有关特定函数的自变量的有效范围的信息,请参阅该函数的描述。

查看该语句中每个标量函数的数字自变量。 更正超出范围的所有值,然后重新发出该语句。

sqlcode:-138

sqlstate:22011

SQL0139W

列  的规范中出现冗余子句。 列规范中的子句是冗余的。

语句处理成功,但是忽略了冗余的子句。

更正列规范。

sqlcode:+139

sqlstate:01589

SQL0142N

不支持 SQL 语句。 在其他 SQL 方言中有效的过程化 SQL 语句不受此数据服务器支持,或者对其他 IBM 关系数据库有效的 SQL 语句不受此数据服务器支持。

联合系统用户:检查是否已将 SQL 语句定向至不支持该 SQL 语句的数据源。

无法处理该语句。

更改该 SQL 语句的语法,或从程序中移除该语句。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的 SQL 方言。

SQL0143W

不支持 SQL 语句; 忽略无效的语法。 对于其他 IBM 关系数据库产品可能有效的嵌入式 SQL 语句,可被数据库管理器了解,但却不受支持。

该语句可能产生了不一致或不需要的结果。

更改该 SQL 语句的语法,或从程序中移除该语句。

SQL0150N

INSERT、DELETE、UPDATE、MERGE 或 TRUNCATE 语句中的目标全查询、视图、类型表、具体化查询表、范围集群表或者登台表是不允许对其执行所请求的操作的目标。 已定义 INSERT、UPDATE、DELETE、MERGE 或 TRUNCATE 语句中所指定的全查询、视图、类型表、具体化查询表、范围集群表或登台表,因此不能执行所请求的插入、更新、删除或截断操作。

如果视图或全查询的 SELECT 语句包含下列任一项,那么视图或全查询为只读的:

  • DISTINCT 关键字
  • SELECT 列表中的列函数
  • GROUP BY 或 HAVING 子句
  • 标识下列其中一项的 FROM 子句:
    • 多个表或视图
    • 只读视图( SYSCAT.VIEWS 的 READONLY 列设置成“Y”)
    • 后面紧跟着时间段规范的系统时间段时间表
  • 集合运算符(除 UNION ALL 外)。
  • 联合系统用户:导致视图不能更新的特定于数据源的限制

注意,这些条件不适用于 SELECT 语句或全查询的子查询。

直接或间接包含引用子查询或使用 NOT DETERMISTIC 或 EXTERNAL ACTION 定义的例程的 WHERE 子句的视图不能用作 MERGE 语句的目标。

使用 WITH ROW MOVEMENT 子句定义的视图不能用作包含更新操作的 MERGE 语句的目标。

通过使用 UNION ALL 的全查询定义的视图不能用作指定修改操作中的 period 子句的 MERGE 语句的目标。

无法直接将行插入到对不可实例化的结构化类型定义的类型表中。 此表的子表可能允许插入。

通常,系统维护的具体化查询表和登台表不允许插入、更新、删除或截断操作。

不能在截断操作中使用范围集群表。

无法处理该语句。

不能对全查询、视图、系统维护的具体化查询表、范围集群表或登台表执行所请求的功能。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查数据源的对象定义和更新限制。

sqlcode:-150

sqlstate:42807

SQL0151N

不能更新列 名称 指定的列不能更新,因为尝试了下列其中一项:

  • 对象表是一个视图,并且指定的列是从视图的标量函数、表达式、关键字、常量或列中派生出来的,而在此视图中不能更新该列。
  • 所指定的列是系统目录的不可更新列,或者是显式标记为 READ ONLY 的列。
  • 表中的 BUSINESS_TIME 时间段包括所指定的要更新的列。 不能在触发器主体中修改 BUSINESS_TIME 时间段的列。
  • 表中的 BUSINESS_TIME 时间段包括所指定的要更新的列。 如果数据更改语句包括 period 子句,那么不能修改 BUSINESS_TIME 时间段的列。

联合系统用户应检查是否有其他某个特定于数据源的限制阻止更新该列。

无法处理该语句。

如果指定的列是从标量函数、表达式、关键字或不可更新的列中派生出来的,那么省略更新的设置子句中的列或者插入的列。 要获取可更新目录(和可更新列)的列表,请参阅 SQL Reference。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查数据源的对象定义和更新限制。

sqlcode:-151

sqlstate:42808

SQL0152N

约束 约束名 是 实际约束类型 约束而不是 期望约束类型 约束。 尝试改变或删除约束 约束名,但是它定义为 期望约束类型 约束,而不是指定的 实际约束类型 约束。 验证要改变或删除的约束的名称和类型。

sqlcode:-152

sqlstate:42809

SQL0153N

语句不包括必需的列表。

当发生下列情况时,必须在 CREATE VIEW 语句、公共表表达式或在包含作为子查询子句的 CREATE TABLE 语句中指定列列表:

  • 全查询中的 SELECT 列表的任一元素都不是列名称并且都未使用 AS 子句命名。
  • 任两个元素是相同的列名称,未使用 AS 子句重命名。

无法处理该语句。

在 CREATE VIEW 语句、公共表表达式和 CREATE TABLE 语句中提供列名称列表,或使用 AS 子句在全查询的 SELECT 列表中命名列。

sqlcode:-153

sqlstate:42908

SQL0155N

不能修改触发器转换表。 触发器包括带有标识的 OLD_TABLE 或 NEW_TABLE 的 REFERENCING 子句。 DELETE、INSERT 或 UPDATE 触发的 SQL 语句使用了指定为 OLD_TABLE 或 NEW_TABLE 的名称作为要修改的表。 从触发操作中移除 DELETE、INSERT 或 UPDATE 触发 SQL 语句,或者更改转换表的名称,以便使该名称不与您正尝试修改的表冲突。

sqlcode:-155

sqlstate:42807

SQL0156N

此操作所使用的名称不是表。 ALTER TABLE、DROP TABLE、SET INTEGRITY、CREATE TRIGGER、CREATE INDEX、LOCK TABLE 和 RENAME TABLE 这些 SQL 语句只适用于表,而不适用于视图。 RUNSTATS、LOAD 和 REDISTRIBUTE DATABASE PARTITION GROUP 实用程序也只适用于表,而不适用于视图。

联合系统用户:在联合环境中,不支持某些实用程序和语句。 请参阅《管理指南》以了解更多信息。

无法处理该语句或实用程序。

验证在语句中指定了正确的表名称。 如果提供了别名,那么确保可将该别名解析为一个表。

联合系统用户:验证该对象是否不是昵称。

sqlcode:-156

sqlstate:42809

SQL0157N

在 FOREIGN KEY 子句中不允许 名称,因为它不标识基本表。 在 CREATE 或 ALTER TABLE 语句的 FOREIGN KEY 子句中标识了对象 名称。 FOREIGN KEY 子句必须标识基本表。

无法处理该语句。 未创建或改变指定的表。

更正语句以在 FOREIGN KEY 子句中指定基本表名。

如果提供了别名,那么确保该别名可解析为一个基本表。

sqlcode:-157

sqlstate:42810

SQL0158N

为 名称 指定的列数与结果表中的列数不相同。

标识 名称 可标识:

  • 在 CREATE VIEW 语句中指定的视图
  • 公共表表达式的表名
  • 嵌套表表达式的相关名
  • 在 CREATE TABLE 或 ALTER TABLE 语句中指定的具体化查询表
  • 在 CREATE FUNCTION 语句中指定的函数
  • 在 CREATE METHOD 语句中指定的方法。
  • CREATE STAGING TABLE 语句中的登台表名

指定的列名数必须等于相关联的全查询的结果表中的列数。 如果 名称 是登台表并且相关的具体化查询表有 group by 子句,指定的列名数目必须比为其定义登台表的具体化查询表中的列数目多 2。 如果相关的具体化查询表没有 group by 子句,指定的列名称数目必须比具体化查询表中的列数目多 3。

无法处理该语句。

更正语法,以使对 名称 定义的列名列表为结果表中的每一列指定一个名称。

sqlcode:-158

sqlstate:42811

SQL0159N

语句引用了标识非预期对象类型的对象。 对象:对象。 对象类型:对象类型。 期望的对象类型:期望的对象类型 作为语句或命令的一部分指定的对象 对象 指的是类型为 对象类型 的对象,而不是期望的类型为 期望的对象类型 的对象。

在语句或命令中指定的对象类型必须与由 期望的对象类型 标识的类型相匹配。 例如:

  • 如果语句是 DROP ALIAS PBIRD.T1,那么 PBIRD.T1 必须是别名。
  • 如果 对象类型 是 TABLE,那么指定的表类型可能不受语句支持。
  • CREATE MASK 或 CREATE PERMISSION 语句必须指定当前服务器中存在的基本表。
更改该语句或命令,使之指定期望的对象类型的对象。

sqlcode:-159

sqlstate:42809

SQL0160N

WITH CHECK OPTION 子句对指定的视图无效。 如果下列各项为真,那么 WITH CHECK OPTION 子句不能在视图定义中使用:

  • 视图定义为只读。 如果 SELECT 语句包含下列任一项,那么视图是只读的。 (注意:这些条件不适用于 SELECT 语句的子查询。)
    • DISTINCT 关键字
    • 所选列表中的列函数
    • GROUP BY 或 HAVING 子句
    • 标识以下任一项的 FROM 子句:
      • 多个表或视图
      • 只读视图
    • 集合运算符(除 UNION ALL 之外)。
  • CREATE VIEW 语句中的 SELECT 语句包括子查询(某些目录表的特定统计信息列除外)。
  • 指定的视图定义依赖于的视图定义了 INSTEAD OF 触发器。
  • 指定的视图定义依赖于的视图包含文本搜索功能。

联合系统用户:在引用可更新昵称的视图上不支持 WITH CHECK 选项。

无法处理该语句。 未创建指定的视图。

移除 WITH CHECK OPTION 子句,或更改视图定义,以使其符合此消息中列示的规则。

sqlcode:-160

sqlstate:42813

SQL0161N

插入或更新操作的结果行不符合视图定义。 在作为插入或更新操作的对象的视图定义中指定了 WITH CHECK OPTION 子句,或者 FROM 子句指定了将视图作为目标的插入或更新操作。 因此,检查在该视图中插入或更新行的所有尝试,以确保其结果符合视图定义。

如果 FROM 子句中包含以视图作为目标的插入或更新操作,那么始终将当作视图已经定义了 WITH CHECK OPTION 一样来处理插入或更新操作。

无法处理该语句。 未执行任何插入或更新,且视图及其基本表的内容保持不变。

检查视图定义,确定请求的插入或更新操作被拒绝的原因。 注意:这可能是一个与数据有关的条件。

所请求的插入或更新操作可能正在尝试将超出范围的值放入目标列中。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查数据源的对象定义和视图定义。

sqlcode:-161

sqlstate:44000

SQL0170N

函数 名称 的自变量数不正确。 指定的标量函数 名称 带有太少或太多的自变量。

无法处理该语句。

确保对标量函数指定了正确数目的自变量。

sqlcode:-170

sqlstate:42605

SQL0171N

由于例程 routine-name 的位置 n 中参数的数据类型、长度或值不正确,因此未处理该语句。 参数名:参数名 有两种情况可能会返回此消息:

  • 例程参数的自变量的数据类型、长度或值不正确。
  • 指定了有冲突或不受支持的参数组合。

如果位置不适用或未知,那么将返回 n 的值 0。 如果参数名称不适用或未知,那么将返回 parameter-name 的空字符串。

通过查看例程参数的规则来确定标记中的参数 参数名 的错误之处:

  • 必需的和受支持的参数
  • 参数自变量的有效范围
  • 参数的有效组合

再次调用该例程并指定有效参数。

sqlcode:-171

sqlstate:5UA0J、5UA05、5UA06、5UA07、5UA08、5UA09、2201G、2201T、2201V、10608、22003、22014、22016、22546 和 42815

SQL0172N

名称 是无效的函数名。 SQL 语句包括了一个未知的标量函数。

无法处理该语句。

确保函数名称的拼写正确。

sqlcode:-172

sqlstate:42601

SQL0176N

TRANSLATE 标量函数的第二个、第三个或第四个自变量不正确。

该语句由于下面一个或多个原因而不正确:

  • 转换标量函数不允许由一个使用不同字节数编码的字符来替换另一个字符。 例如,单字节字符不能用双字节字符替换,双字节字符也不能用单字节字符替换。
  • 转换标量函数的第二个和第三个自变量必须以正确格式的字符结束。
  • 如果第一个自变量是 CHAR 或 VARCHAR,那么转换标量函数的第四个自变量必须是一个正确格式的单字节字符。
  • 如果第一个自变量是 GRAPHIC 或 VARGRAPHIC,那么转换标量函数的第四个变量必须是一个正确格式的双字节字符。

无法处理该语句。

确保转换标量函数的第二个、第三个和第四个自变量有正确的值。

sqlcode:-176

sqlstate:42815

SQL0180N

日期时间值的字符串表示法的语法不正确。 日期、时间或时间戳记值的字符串表示法不符合指定的或隐含的数据类型语法。

无法处理该语句。

确保日期、时间或时间戳记值的语法符合其数据类型语法。 如果不打算将该字符串用作日期、时间或时间戳记值,那么确保在使用该字符串时,它并未暗指该数据类型。

联合系统用户:该问题可能是由数据源上的日期/时间表示问题所引起的。 如果原因未知,请找出使请求失败的数据源中的问题,并检查该数据源的日期/时间表示限制。

sqlcode:-180

sqlstate:22007

SQL0181N

日期时间值的字符串表示法超出范围。 日期、时间或时间戳记值的字符串表示法包含超出范围的值。

此错误可能由从使用其日期时间格式与创建它的应用程序使用的日期时间格式不同的地域代码的应用程序访问日期时间值导致的。 例如,当读取字符串日期时间值的应用程序期望该值的格式为 mm/dd/yyyy 时,以格式 dd/mm/yyyy 存储的字符串日期时间值将是无效的。

日期、时间或时间戳记值的正确范围如下所示:

  • 年份为 0001 到 9999。
  • 月份为 1 到 12。
  • 当月份为 1、3、5、7、8、10 和 12 时,日为 1 到 31。
  • 当月份为 4、6、9、11 时,日为 1 到 30。
  • 非闰年的月份为 2 时,日为 1 到 28。
  • 闰年的月份为 2 时,日为 1 到 29。
  • 小时为 0 到 24。 如果小时为 24,那么时间的其他部分为 0。 如果为 USA 格式,小时不能大于 12。
  • 分钟为 0 到 59。
  • 秒为 0 到 59。
  • 秒的小数部分为 0 到 999999999999。
  • 不是闰年时,儒略历日期的天部分为 001 至 365。
  • 是闰年时,儒略历日期的天部分为 001 至 366。

联合系统用户:该问题可能是由数据源上的日期/时间表示问题所引起的。 请参阅该数据源的文档,以获取该数据源的日期和时间值范围。 如果原因未知,请找出使请求失败的数据源中的问题,并检查该数据源的日期/时间表示限制。

无法处理该语句。

确保值在有效范围中,且应用程序与字符串值的日期时间格式相同。

sqlcode:-181

sqlstate:22007

SQL0182N

带有日期时间值或作了标记的持续时间的表达式无效。 指定的表达式包含未正确使用的日期、时间或时间戳记值或作了标记的持续时间。

无法处理该语句。

检查 SQL 语句,确定问题的原因并更正该语句。

sqlcode:-182

sqlstate:42816

SQL0183N

日期时间算术运算或日期时间标量函数的结果不在有效的日期范围内。 算术运算的结果为范围 0001-01-01 到 9999-12-31 之外的日期或时间戳记持续时间。

无法执行该语句。

检查 SQL 语句以确定问题的原因。 如果问题与数据有关,那么检查当错误发生时所处理的数据。

sqlcode:-183

sqlstate:22008

SQL0187N

对当前日期/时间专用寄存器的引用无效。 当检索日期/时间信息时,检测到操作系统指示的错误。 确保系统 TOD 时钟及时区设置正确。

sqlcode:-187

sqlstate:22506

SQL0190N

ALTER TABLE 表名 为列 列名 指定的属性与现有列不兼容。 在 ALTER COLUMN 子句中对 ALTER TABLE 语句中表 表名 的列 列名 指定的属性与现有列的属性不兼容。 由于下列原因之一而返回了错误。

  • 如果为现有列指定了 SET DATA TYPE 子句,但是存在下列情况:
    • 该数据类型不是可以改变的数据类型
    • 对现有数据或缺省值的数据类型进行转换将导致溢出、不允许产生的截断或者强制类型转换错误
    • 无法将该数据类型更改为新数据类型
    • 当前数据类型是 SYSPROC.DB2SECURITYLABEL,无法更改此数据类型
    • 无法将数据类型改变为 SYSPROC.DB2SECURITYLABEL
  • 如果指定了 SET EXPRESSION 子句,但是现有列存在下列情况:
    • 不是定义为使用表达式生成。
    • 是表分区键的一部分。
  • 如果指定了 DROP COLUMN SECURITY 选项,但是该列尚不受安全标号保护。
  • 如果指定了 DROP DEFAULT,但是未使用缺省属性定义该列。
  • 如果指定了 DROP IDENTITY,但是未将该列定义为标识列。
  • 如果指定了 DROP EXPRESSION,但是未使用生成表达式来定义该列。
  • 如果指定了 SET DEFAULT,但是已使用另一种生成格式(标识或表达式)定义该列,并且在同一语句中没有相应的 DROP。
  • 如果指定了 SET GENERATED ALWAYS AS(表达式),但是已使用生成格式(缺省、标识或表达式)定义该列,并且在同一语句中没有相应的 DROP。
  • 如果指定了 SET GENERATED ALWAYS AS IDENTITY 或者 SET GENERATED BY DEFAULT AS IDENTITY,但是已使用生成格式(缺省、标识或表达式)定义该列,并且在同一语句中没有相应的 DROP。
  • 如果指定了 SET GENERATED ALWAYS 或者 SET GENERATED BY DEFAULT,但是该列不是标识列。
  • 如果指定了附带 SET GENERATED 的 ALTER COLUMN 来将该列更改为“行开始”列、“行结束”列或“事务开始标识”列,但是先前已经将该列定义为生成列。
  • 如果指定了 ALTER COLUMN 来将该列更改为“行开始”列、“行结束”列或“事务开始标识”列,但是已经为该列定义了由用户指定的缺省值。
  • 如果指定了 ALTER COLUMN SET DATA TYPE,但是 BUSINESS_TIME 时间段的开始列或结束列的精度降低了。 不能降低精度。
  • 如果指定了 ALTER COLUMN SET DEFAULT,但是该列是生成列。
  • 如果指定了 DROP DEFAULT,但是该列是“行开始”列、“行结束”列或“事务开始标识”列。
  • 如果指定了 DROP GENERATED,但是该列不是生成列。
  • 如果指定了 DROP NOT NULL,但是在该表的主键中指定了该列,或者该列是标识列、“行更改时间戳记”列、“行开始”列、“行结束”列或随机分发键列。
  • 如果指定了 SET NOT NULL,那么该列是随机分发键列

无法处理该语句。

使指定的属性与现有列相兼容,移除属性规范,或者指定另一个列名。 如果指定了 SET DATA TYPE 子句,请检查通知日志,以找出可能发生了条目列示冲突的行,这些行可能已经不允许执行 ALTER COLUMN。 如果对已经具有用户指定的缺省值的列指定了 ALTER COLUMN,那么必须在发出 ALTER TABLE 语句删除此缺省值之后,才能更改列定义。

sqlcode:-190

sqlstate:42837

SQL0191N

因为分段 MBCS 字符而出错。 原因可能是:

  1. 用户数据包含格式不正确的多字节字符。 例如,找到 DBCS 字符的第一个字节,但却找不到第二个字节。
  2. 标量函数(如 SUBSTR 或 POSSTR)不正确地截断了多字节字符串。 对于这些函数,在数据库代码页的上下文中,起始值和长度值(以字节数计)必须正确。 对于Unicode 数据库,此问题的常见原因是 UTF-8 字符串的起始值和长度值不正确。
  3. 标量函数(如 TRANSLATE)可能已更改多字节字符串。

联合系统用户:数据源也可能会检测到此情况。

  1. 更正输入数据,然后再次尝试。
  2. 更改起始值和长度值,以便在将字符转换至数据库代码页时,不会错误截断多字节字符。
  3. 更正出错的 TRANSLATE。

联合系统用户:如果数据正确,那么找出导致请求失败的数据源中的问题,并检查该数据源的 DBCS 限制。 如果数据看起来正确,请与 IBM 服务中心联系以获取辅助。

sqlcode:-191

sqlstate:22504

SQL0193N

在 ALTER TABLE 语句中,已将列 列名 指定为 NOT NULL,而 DEFAULT 子句或者未指定,或者被指定为 DEFAULT NULL。 当对已存在的表添加新列时,必须为所有现有的行给此新列赋值。 缺省情况下,指定空值。 但是,因为该列定义为 NOT NULL,所以必须定义除空之外的缺省值。 移除对列的 NOT NULL 限制或为列提供除空之外的缺省值。

sqlcode:-193

sqlstate:42601

SQL0195N

不能删除 表名 的最后一列。 尝试使用 ALTER TABLE 语句来删除一列或多列。 不能从表 表名 中删除列,因为改变表时必须至少保留现有的其中一列。 一旦完成了 ALTER 语句,确保表 表名 中至少有一列。 移除其中一列的 DROP 并再次尝试发出该请求;或者,如果应该移除所有列,那么删除然后再次创建该表。

sqlcode:-195

sqlstate:42814

SQL0196N

无法删除 table-name 中的 column-name 列。 原因码:原因码 尝试删除列 列名。 请参阅原因码以获取有关无法删除该列的说明。

1
无法删除该列,因为它是多节点分布键、表分区键或 MDC 组织维的一部分。
2
无法删除该列,因为系统生成的列依赖于该列。
3
不能删除 SYSPROC.DB2SECURITYLABEL 类型的列。
4
无法删除该列,因为在时间段的定义中引用了该列。
5
无法删除该列,因为它是系统时间段时间表中的一列。
6
无法删除该列,因为它是历史记录表中的列。
1
在更改表的键或维之前,无法删除该列。
2
更改从属列的生成表达式。
3
删除并重新创建该表,而不创建 SYSPROC.DB2SECURITYLABEL 类型的列
4
更改用于请求删除该列的语句。
5
从系统时间段时间表中删除某列时,要求也要从相关联的历史记录表中删除此列。 可以按照下列步骤从这两个表中删除某列。

  1. 改变系统时间段时间表以删除版本控制。 这将断开这两个表之间的链接。
  2. 改变系统时间段时间表以删除此列。
  3. 改变作为历史记录表的表以删除此列。
  4. 改变前一系统时间段时间表以添加版本控制。 这将重新建立这两个表之间的链接。
6
从历史记录表中删除某列时,要求也要从相关联的系统时间段时间表中删除此列。 可以按照下列步骤从这两个表中删除某列。

  1. 改变系统时间段时间表以删除版本控制。 这将断开这两个表之间的链接。
  2. 改变系统时间段时间表以删除此列。
  3. 改变作为历史记录表的表以删除此列。
  4. 改变前一系统时间段时间表以添加版本控制。 这将重新建立这两个表之间的链接。

sqlcode:-196

sqlstate:42817

SQL0197N

限定的列名在 ORDER BY 子句中是不允许的。 包括集合运算符(UNION、EXCEPT、INTERSECT)的全查询的 ORDER BY 子句不能有限定的列名。 确保 ORDER BY 子句中所有的列名为非限定的。

sqlcode:-197

sqlstate:42877

SQL0198N

PREPARE 或 EXECUTE IMMEDIATE 语句的语句字符串为空白或空。 作为 PREPARE 或 EXECUTE IMMEDIATE 语句的对象的主机变量包含的全为空白,或为空字符串。

无法完成 PREPARE 或 EXECUTE IMMEDIATE。

更正程序的逻辑以确保在 PREPARE 或 EXECUTE IMMEDIATE 语句执行以前,在它的操作数中提供了有效的 SQL 语句。

sqlcode:-198

sqlstate:42617

SQL0199N

在 text 之后使用保留字 keyword 无效。 预期标记可能包括:标记列表 当保留字 关键字 出现在 文本 之后时,在语句中该点上检测到 SQL 语句中的语法错误。 文本 字段指示该保留字前面的 SQL 语句的 20 个字符。 语句中的子句的顺序可能是错误的。

作为对程序员的帮助,在 SQLCA 的 SQLERRM 字段中,提供了有效标记的部分列表作为 标记列表。 此列表假定语句直到该位置为止均正确。

无法处理该语句。

检查在关键字区域内的语句。 如果丢失,添加一个冒号或 SQL 定界符。 验证这些子句是否顺序正确。 如果消息中标识的保留字列示为保留字,那么使该字成为定界标识。

注意:此错误仅适用于版本 2 之前的 DB2 发行版。

sqlcode:-199

sqlstate:42601

SQL0203N

对列 名称 的引用是有歧义的。

在语句中使用了列 名称,并且该语句可能可引用多个列。 这可能是如下操作的结果:

  • 在 FROM 子句中指定的两个表有同名的列
  • ORDER BY 子句引用适用于选择列表中的多列的名称
  • 对于 CREATE TRIGGER 语句中主题表的列的引用不使用相关名称来指示它是否引用旧或新的转换变量。

该列名需要进一步的信息来建立它是可能的表列中的哪个列。

无法处理该语句。

对列名添加一个限定符。 限定符是表名或相关名。 可能需要在选择列表中重命名列。

sqlcode:-203

sqlstate:42702

SQL0204N

名称 是一个未定义的名称。 此错误由以下之一引起:

  • 未在数据库中定义由 名称 标识的对象。
  • 名称 所标识的对象是在模块中定义的,它不是已发布的模块对象,但在模块外部被引用。
  • 在表上未定义由 名称 标识的数据分区。
  • 正在使用某个数据类型。 此错误可能是由于下列原因而导致的:
    • 如果 名称 是限定名称,那么表明具有此名称的数据类型在与限定符匹配的模式中不存在,或者在与根据用户的 SQL 路径首先找到的限定符匹配的模块中不存在。
    • 如果 名称 是非限定名称,那么表明用户的路径未包含期望的数据类型所属的模式,或者在该模块中未定义该数据类型(如果该引用从模块例程中进行)。
    • 该数据类型在创建时间戳记早于程序包绑定时间的数据库中不存在(适用于静态语句)。
    • 如果数据类型在 CREATE TYPE 语句的 UNDER 子句中,那么该类型名可能与正定义的类型相同,这是无效的。
  • 下列其中一项中正在引用某个函数:
    • DROP FUNCTION 语句
    • COMMENT ON FUNCTION 语句
    • CREATE FUNCTION 语句的 SOURCE 子句如果 名称 是限定名称,那么函数不存在。 如果 名称 是非限定名称,那么当前路径的任何模式中都不存在此名称的函数。请注意,函数不能以 COALESCE、DBPARTITIONNUM、GREATEST、HASHEDVALUE、LEAST、MAX (scalar)、MIN (scalar)、NULLIF、RID、NVL、RAISE_ERROR、TYPE_ID、TYPE_NAME、TYPE_SCHEMA 或 VALUE 内置函数作为源函数。
  • 在 CREATE SECURITY LABEL COMPONENT 语句中 UNDER 子句右边使用了名为 名称 的元素,但尚未将该元素定义为 ROOT 或者在其他某个元素下方(UNDER)。
  • 尚未定义名为 名称 的安全标号组件元素。
  • 下列其中一个标量函数指定了由 名称 标识的安全策略,但在数据库中未定义该安全策略。
    • SECLABEL
    • SECLABEL_TO_CHAR
    • SECLABEL_BY_NAME

可为任何类型的数据库对象生成此返回码。

联合系统用户:在数据库中未定义由 名称 标识的对象,或者 名称 不是 DROP NICKNAME 语句中的昵称。

某些数据源未向 名称 提供适当的值。 在这些情况下,消息标记将具有以下格式:“OBJECT:<data source> TABLE/VIEW”,指示指定数据源的实际值未知。

无法处理该语句。

确保在 SQL 语句中正确指定了对象名(包括任何必需的限定符),并且它存在。 如果该名称表示一个数据分区,那么查询目录表 SYSCAT.DATAPARTITIONS 以找到一个表的所有数据分区。 对于 SOURCE 子句中缺少的数据类型或函数,可能是该对象不存在,或该对象处于某模式中,但该模式不在您的路径中。

对于 CREATE 或 ALTER SECURITY LABEL COMPONENT 语句,应确保安全标号组件中存在指定为用于定位新元素值所在位置的引用元素值的每个元素。

对于 CREATE SECURITY LABEL COMPONENT 语句而言,确保先将每个元素指定为 ROOT 或者 UNDER 子句中的子代,然后再在 UNDER 子句中将其指定为父代元素。

对于标量函数 SECLABEL、SECLABEL_TO_CHAR 或 SECLABEL_BY_NAME 而言,确保对自变量“安全策略名”指定了有效的安全策略。

联合系统用户:如果该语句是 DROP NICKNAME,那么确保该对象实际上是一个昵称。 该对象可能不存在于联合数据库中或数据源上。 验证任何联合数据库对象和任何数据源对象的存在情况。

sqlcode:-204

sqlstate:42704

SQL0205N

object-name 中未定义列、属性或句号 name 。 如果 对象名 是表或视图,那么 名称 是未在 对象名 中定义的列或时间段。 如果 对象名 是结构化类型,那么 名称 是未在 对象名 中定义的属性。

联合系统用户:对象名 可以是指昵称。

无法处理该语句。

如果 对象名 是表或视图,那么验证是否在 SQL 语句中正确指定了列名、时间段名称、表名或视图名(包括任何必需的限定符)。 如果 对象名 是结构化类型,那么验证是否在 SQL 语句中正确指定了属性名和类型名(包括任何必需的限定符)。

此外,如果在 REORG 或 IMPORT 期间接收到此错误,那么索引中的列名可能违反了在 SQL Reference 中定义的数据库管理器命名规则。

sqlcode:-205

sqlstate:42703

SQL0206N

名称 在使用它的上下文中无效。 此错误在下列情况中可能发生:

  • 对于 INSERT 或 UPDATEF 语句,指定的列不是表的列或指定作为插入或更新对象的视图的列。
  • 对于 SELECT 或 DELETE 语句,指定的列不是语句中 FROM 子句所标识的任何表或视图的列。
  • 对于赋值语句,引用名称未解析为列或变量的名称。
  • 在引用行类型变量中的字段时,引用名称未解析为该行类型中任何字段的名称。
  • 对于 ORDER BY 子句,指定的列是子查询中的相关列引用,而这是不允许的。
  • 对于参数化游标构造函数中的 SELECT 语句,对 名称 的引用未与某个列或作用域内变量匹配。 在参数化游标的作用域内,不会考虑局部变量和例程 SQL 参数。
  • 对于独立的复合 SQL(编译型)语句:
    • 引用 名称 未解析为某个列或作用域内局部变量的名称。
    • 尚未声明在 SIGNAL 语句中指定的条件名 名称
    • 在引用行类型变量中的字段时,引用名称未解析为该行类型中任何字段的名称。
  • 对于 CREATE TRIGGER、CREATE METHOD、CREATE FUNCTION 或 CREATE PROCEDURE 语句:
    • 引用 名称 未解析为列名、局部变量名或转换变量名。
    • 引用 名称 解析为在当前作用域内不可用的局部变量的名称。
    • 尚未声明在 SIGNAL 语句中指定的条件名 名称
    • 在引用行类型变量中的字段时,引用名称未解析为该行类型中任何字段的名称。
  • 对于 CREATE TRIGGER 语句:
    • 引用主题表列而未使用 OLD 或 NEW 相关名。
    • 触发的操作中 SET 转换变量语句的赋值符号左边指定旧转换变量,而此处仅支持新转换变量。
  • 对于带有 PREDICATES 子句的 CREATE FUNCTION 语句:
    • SQL 函数的 RETURN 语句引用不是参数的变量或者 RETURN 语句范围内的其他变量。
    • FILTER USING 子句引用不是参数名或 WHEN 子句中的表达式名的变量。
    • 在索引使用规则中的搜索目标与正在创建的函数的某些参数名不匹配。
    • 在索引使用规则中的搜索自变量与 EXPRESSION AS 子句中的表达式名或者正在创建的函数的参数名不匹配。
  • 对于 CREATE INDEX EXTENSION 语句,RANGE THROUGH 子句或 FILTER USING 子句引用不是在该子句中可以使用的参数名的变量。
  • 对于参数化游标变量引用,参数化游标变量定义中使用的 SELECT 语句中引用的局部 SQL 变量或 SQL 参数在当前作用域内不可用。
  • 对于时间段引用,所指定的时间段不在此语句的任何源表或源视图(或者目标表或目标视图)中。

无法处理该语句。

验证是否在 SQL 语句中正确指定了名称。 对于 SELECT 语句,确保在 FROM 子句中命名了所有必需的表。 对于 ORDER BY 子句中的子查询,确保无相关列引用。 如果对表使用相关名,那么验证后续引用使用的是相关名,而不是表名。

对于 CREATE TRIGGER 语句,确保在 SET 转换变量语句赋值符号左边仅指定了新的转换变量,并且对主题表列的任何引用都有指定的相关名称。

对于独立的复合 SQL 语句、CREATE FUNCTION、CREATE PROCEDURE 或 CREATE TRIGGER 语句,验证那些列或变量在当前复合 SQL 语句的作用域内是否可用。

对于使用 db2-fn:sqlquery 函数嵌入在 XQuery 中的全查询,该全查询中的引用必须是下列其中一项:该全查询上下文中的列、全局变量或使用 db2-fn:sqlquery 函数的其他自变量传递给新的 SQL 上下文的参数。

sqlcode:-206

sqlstate:42703

SQL0207N

列名在与集合运算符配合使用的 SELECT 语句的 ORDER BY 子句中是不允许的。 带有集合运算符的 SELECT 语句包含 ORDER BY 子句,它指定列名。 在此情况下,ORDER BY 子句中的列的列表必须仅包含整数。

无法处理该语句。

在 ORDER BY 子句中的列的列表中仅指定整数。

注意:此错误仅适用于版本 2 之前的 DB2 发行版,以及通过 DB2 Connect 访问的主机。

sqlcode:-207

sqlstate:42706

SQL0208N

因为列 名称 不是结果表的一部分,所以 ORDER BY 子句无效。 因为在 SELECT 列表中未指定在 ORDER BY 列表中指定的列 名称 并且该列不在结果表中,所以语句无效。 当 SELECT 语句的全查询不是子查询时,仅结果表中的列可用于排序该结果。

无法处理该语句。

要更正语句语法,向结果表中添加指定列,或者从 ORDER BY 子句中删除指定列。

sqlcode:-208

sqlstate:42707

SQL0212N

名称 是重复的表标志符,或在触发器定义的 REFERENCING 子句中多次指定。 由 名称 指定的外部表、视图、别名或相关名与同一个 FROM 子句中的另一个外部表、视图、别名或相关名完全相同。

如果语句是 CREATE TRIGGER,那么 REFERENCING 子句可能指定了与主题表相同的名称,或者多个 OLD 或 NEW 相关名、NEW_TABLE 或 OLD_TABLE 标识有同一名称。

无法处理该语句。

重写 SELECT 语句的 FROM 子句。 使相关名与表、视图或别名相关,使得没有外部表、视图、别名或相关名与 FROM 子句中的任何其他外部表、视图、别名或相关名相同。

对于 CREATE TRIGGER 语句,更改 REFERENCING 子句中的名称以避免重复。

sqlcode:-212

sqlstate:42712

SQL0213N

参数 参数名 不在例程 例程名 中。 名称为 参数名 的参数在例程 例程名 中不存在。 请为该例程指定现有参数名,然后重新提交该语句。

sqlcode:-213

sqlstate:42703

SQL0214N

在以下位置的 ORDER BY 子句中的表达式,或在 clause-type 子句中以 expression-start-or-order-by-position 开始的表达式无效。 原因码:原因码 由 子句类型 子句中的表达式 表达式开始或按位置排序 的第一部分标识的表达式无效,原因由 原因码 指定,如下所示:

1
SELECT 语句的全查询不是子查询。 对于此类型的 SELECT 语句,ORDER BY 子句中不允许有表达式。 仅当 子句类型 是 ORDER BY 时,才出现此原因码。
2
在 SELECT 子句中指定了 DISTINCT,而该表达式与选择列表中的表达式不能精确匹配。 仅当 子句类型 是 ORDER BY 时,才出现此原因码。
3
分组是因 ORDER BY 子句中存在列函数而引起的。 仅当 子句类型 是 ORDER BY 时,才出现此原因码。
4
GROUP BY 子句中的表达式不能包括标量全查询。 仅当 子句类型 是 GROUP BY 时,才出现此原因码。
5
GROUP BY 子句中取消引用运算符的左边不能是变体函数。 仅当 子句类型 是 GROUP BY 时,才出现此原因码。
6
ORDER BY 子句中的表达式不能包括 XMLQUERY 或 XMLEXISTS。 仅当 子句类型 是 ORDER BY 时,才出现此原因码。
7
GROUP BY 子句中的表达式不能包括 XMLQUERY 或 XMLEXISTS。 仅当 子句类型 是 GROUP BY 时,才出现此原因码。
8
在 LISTAGG 函数中指定了 DISTINCT,而第一个自变量表达式无法与 WITHIN GROUP 子句中指定的 ORDER BY 的第一个排序键表达式完全匹配。 仅当 子句类型 是 ORDER BY 时,才出现此原因码。
9
子句类型 中所指示聚集函数的 ORDER BY 子句内的排序键具有不正确的数据类型。
10
子句类型 中所指示聚集函数的 ORDER BY 子句内的排序键表达式数目与表达式数目不相同。
11
子句类型 中所指示聚集函数的 ORDER BY 子句内的排序键具有与相应表达式的数据类型不兼容的数据类型。

无法处理该语句。

根据下面 原因码 所指定的原因来修改 SELECT 语句:

1
从 ORDER BY 子句移除表达式。 如果要尝试引用结果列,请将排序键更改为简单整数或简单列名格式。
2
从 SELECT 子句移除 DISTINCT,或者将排序键更改为简单整数或简单列名格式。
3
添加 GROUP BY 子句,或从 ORDER BY 子句移除列函数。
4
从 GROUP BY 子句移除所有标量全查询。 如果期望根据标量全查询的结果的列来进行分组,那么使用嵌套表表达式或公共表表达式来首先提供一个结果表,该结果表将该表达式作为结果的一个列。
5
从 GROUP BY 子句中取消引用运算符的左边移除任何变体函数。
6
从 ORDER BY 子句中移除任何 XMLQUERY 或 XMLEXISTS 表达式。 如果期望对基于 XMLQUERY 或 XMLEXISTS 表达式的结果列进行排序,那么使用嵌套表表达式或公共表表达式来首先提供一个结果表,而该表达式作为一个结果列。
7
从 GROUP BY 子句中移除任何 XMLQUERY 或 XMLEXISTS 表达式。 如果期望对基于 XMLQUERY 或 XMLEXISTS 表达式的结果列进行分组,那么使用嵌套表表达式或公共表表达式来首先提供一个结果表,而该表达式作为一个结果列。
8
从 LISTAGG 函数中移除 DISTINCT,或者将 WITHIN GROUP 子句中指定的 ORDER BY 的第一个排序键表达式更改为与 LISTAGG 函数的第一个自变量表达式完全匹配。
9
在对该聚集函数的 ORDER BY 子句中的排序键指定有效数据类型的情况下,再次调用例程。
10
在表达式数目等于该聚集函数的 ORDER BY 子句中排序键表达式数目的情况下,再次调用例程。
11
在对该聚集函数的 ORDER BY 子句中的排序键指定与相应表达式的数据类型兼容的数据类型情况下,再次调用例程。

sqlcode:-214

sqlstate:42822

SQL0216N

在谓词运算符两边的元素数不匹配。 谓词运算符是 谓词运算符 谓词包括谓词运算符右边或左边(或两边)的元素的列表。 两边的元素数必须相同。 这些元素可能出现在用圆括号括起来的表达式列表中,或作为全查询中选择列表的元素出现。

无法处理该语句。

更正在谓词运算符两边有不匹配元素数的谓词。

sqlcode:-216

sqlstate:428C4

SQL0217W

当仅在处理 Explain 信息请求时不执行语句。 Explain 专用寄存器之一的当前值已设置为 EXPLAIN。 此值允许预编译并说明动态 SQL 语句,但是阻止执行任何动态语句。 通过从遇到此状态的接口或应用程序发出适当的 SET 语句,将适当的 Explain 专用寄存器的值更改为除 EXPLAIN 之外的设置。

sqlcode:+217

sqlstate:01604

SQL0219N

必需的 Explain 表 名称 不存在。 调用了说明工具,但找不到必需的 Explain 表 名称。 Explain 表必须在调用说明工具之前创建。 创建必需的 Explain 表。 创建 Explain 表所需的“SQL 数据定义语言” 语句可在 sqllib 下 misc 目录中称为 EXPLAIN.DDL 的文件中得到。

sqlcode:-219

sqlstate:42704

SQL0220N

Explain 表 名称 的列 名称-2 的定义不正确或者丢失。

调用了说明工具,但 Explain 表 名称 没有期望的定义。 定义可能由于以下原因而不正确:

  • 定义了不正确的列数(如果 名称-2 是数字)
  • 对列指定了不正确的数据类型(如果 名称-2 是列名)。
  • 表的 CCSID 不正确。
更正指定的 Explain 表的定义。 创建 Explain 表所需的“SQL 数据定义语言” 语句可在 sqllib 下 misc 目录中称为 EXPLAIN.DDL 的文件中得到。

如果在应用更新之后开始发生此错误,那么 Explain 表的必需格式可能已更改。 在这种情况下,请将定义手动调整为当前格式,或者使用 db2exmig 工具将定义调整为当前格式。

调整 Explain 表定义之后,重新发出该命令。

sqlcode:-220

sqlstate:55002

SQL0222N

对使用游标 游标名 的孔尝试执行了操作。 如果 SQLSTATE 是 24510,那么发生错误。 对定义为 SENSITIVE STATIC 的游标 游标名 尝试执行了定位更新或删除,且当前行已经标识为删除孔或更新孔。 当 DB2 尝试更新或删除与游标 游标名 的结果表的当前行相对应的数据库中的行时出现了孔,并且基础表的相应行不再存在。

如果 SQLSTATE 是 02502,那么这是一个警告。 在处理对游标 游标名 的访存时检测到删除孔或更新孔。 当 DB2 尝试重新访存与游标 游标名 的结果表的当前行相对应的数据库中的一行时出现了孔,并且基础表的相应行不再存在。 未返回任何数据。

当已经删除了基础表的相应行时,出现了删除孔。

当在基础表中更新了基础表的相应行时出现了更新孔,以致于更新的行不再满足在游标的 SELECT 语句中指定的搜索条件。

无法处理该语句。 游标仍然处于孔中。

发出 FETCH 语句来定位一行上不是孔的游标。

sqlcode:-222

sqlstate:02502, 24510

SQL0224N

结果表与使用游标 游标名 的基本表不一致。 尝试使用某一行上定义为 SENSITIVE STATIC 的游标 游标名 来执行定位的 UPDATE 或 DELETE,而结果表中的列值与基本表行中的当前值不匹配。 这些行不匹配,因为在将基本表的行访存到结果表与处理定位 UPDATE 或 DELETE 之间这段时间更新了基本表的行。

无法处理该语句。 游标位置未变。

更改隔离级别,以便在游标操作期间不能再更新基本表行,或者更改应用程序,以便执行 FETCH INSENSITIVE,并再次尝试定位 UPDATE 或 DELETE。

sqlcode:-224

sqlstate:24512

SQL0225N

游标 游标名 FETCH 语句无效,因为该游标未定义为 SCROLL。 已经用下列可滚动游标关键字之一指定了不可滚动游标 游标名 的 FETCH 语句:PRIOR、FIRST、LAST、BEFORE、AFTER、CURRENT、ABSOLUTE 或 RELATIVE。 对不可滚动游标仅可指定 NEXT。 未访存任何数据。

无法处理该语句。 游标位置未变。

更改 FETCH 语句以移除当前访存定向关键字(例如 PRIOR 或 FIRST),并将它替换为 NEXT。 另外,将游标的定义更改为可滚动。

sqlcode:-225

sqlstate:42872

SQL0227N

不允许 FETCH NEXT、PRIOR、CURRENT 或 RELATIVE,因为游标 游标名 的位置未知(sqlcodesqlstate)。 游标名 的游标位置未知。 在处理多个检索到的行的过程当中,游标 游标名 的先前多行 FETCH 导致了错误(SQLCODE sqlcode 以及 SQLSTATE sqlstate)。 在发生错误之后,所请求的一行或多行不能返回到程序中,游标的位置仍然未知。

如果在先前的多行 FETCH 中已经提供了指示符结构,那么将已经返回了正的 SQLCODE,并且所检索到的所有行可能已经返回至应用程序。

无法处理该语句。 游标位置未变。

关闭游标,再重新打开该游标,以便复位其位置。 对于可滚动游标,可以更改 FETCH 语句以指定其他访存定向之一,例如:FIRST、LAST、BEFORE、AFTER 或 ABSOLUTE,以便建立有效的游标位置,并访存一行数据。

sqlcode:-227

sqlstate:24513

SQL0228N

为只读游标 游标名 指定了 FOR UPDATE 子句。 游标 游标名 被定义为 INSENSITIVE SCROLL,但是相应的 SELECT 语句包含 FOR UPDATE 子句。

无法处理该语句。

要定义只读游标,在 DECLARE CURSOR 上指定 INSENSITIVE,但是不要将 FOR UPDATE 子句指定为游标的 SELECT 语句的一部分。

sqlcode:-228

sqlstate:42620

SQL0231W

游标 游标名 的当前位置对于当前行的 FETCH 无效。 对可滚动游标 游标名 发出了 FETCH CURRENT 或 FETCH RELATIVE 0 语句。 该操作无效,因为游标未定位在结果表的某行上。 当前行的 FETCH 不允许跟在 FETCH BEFORE 或 FETCH AFTER 语句后面,或者跟在导致了 SQLCODE +100 的 FETCH 语句的后面。

无法处理该语句。 游标位置未变。

在尝试访存当前行之前,确保游标定位在结果表的某行上。

sqlcode:+231

sqlstate:02000

SQL0236W

SQLDA 仅提供了 整数-1 个 SQLVAR 条目。 integer2 integer3 列需要 SQLVAR 条目。 未设置 SQLVAR 条目。 SQLDA 的 SQLN 字段的值至少应与结果集中的列数一样大。

数据库管理器未设置任何 SQLVAR 条目(且 SQLDOUBLED 标志已设置为“关”(即设为空格字符))。

将 SQLDA 中 SQLN 字段的值增大到消息中指示的值(确保 SQLDA 足够大以支持该数量),并重新提交该语句。

sqlcode:+236

sqlstate:01005

SQL0237W

SQLDA 仅提供了 整数-1 个 SQLVAR 条目。 由于至少其中一个描述的列是单值类型,因此应指定了 整数-2 个 SQLVAR 条目。 未设置任何“辅助 SQLVAR”条目。 由于结果集其中至少一列为单值类型,因此应为 SQLVAR 条目(条目数两倍于结果集中的列数)提供空间。 数据库管理器仅设置了基本 SQLVAR 条目(且 SQLDOUBLED 标志已设置为“关”(即设为空格字符))。 如果不需要有关结果集中单值类型的更多信息,那么不需要执行任何操作。 如果需要单值类型的信息,那么 SQLDA 中 SQLN 字段的值应该增大到消息中指示的值(在确保 SQLDA 足够大来支持该值之后),并且应重新提交语句。

sqlcode:+237

sqlstate:01594

SQL0238W

SQLDA 仅提供了 整数-1 个 SQLVAR 条目。 由于描述的列中至少有一列是 LOB 或结构化类型,因此 integer2 列需要 integer3 SQLVAR 条目。 未设置 SQLVAR 条目。 由于结果集中至少有一列是 LOB 或结构化类型,因此必须为两倍于结果集中列数的 SQLVAR 条目提供空间。 还要注意,结果集中一列或多列可能是单值类型。

数据库管理器未设置任何 SQLVAR 条目(且 SQLDOUBLED 标志已设置为“关”(即设置为空格字符))。

将 SQLDA 中 SQLN 字段的值增大到消息中指示的值(在确保 SQLDA 足够大来支持该值之后),并重新提交该语句。

sqlcode:+238

sqlstate:01005

SQL0239W

SQLDA 仅提供了 整数-1 个 SQLVAR 条目。 由于描述的列中至少有一个是独立类型或引用类型,因此 integer2 列需要 integer3 SQLVAR 条目。 未设置 SQLVAR 条目。 如果结果集中的任何列都为单值类型或引用类型,那么应为两倍于结果集中列数的 SQLVAR 条目提供空间。

数据库管理器未设置任何 SQLVAR 条目(且 SQLDOUBLED 标志已设置为“关”(即设置为空格字符))。

如果需要单值类型或引用类型的信息,那么 SQLDA 中 SQLN 字段的值应该增大为消息中指示的值(在确保 SQLDA 足够大,可支持该数量之后),并且应重新提交语句。 如果不需要有关结果集中的单值类型或引用类型的其他信息,那么有可能重新提交该语句,以只提供足够的 SQLVAR 条目来容纳结果集中的列数。

sqlcode:+239

sqlstate:01005

SQL0242N

对象列表中多次指定了名为 对象名,且类型为 对象类型 的对象。 在类型为 对象类型 的对象名列表中,多次指定了名为 对象名 的对象。 不能多次对该对象执行该语句的操作。 更正列表中重复的对象,移除重复出现的那些对象。

sqlcode:-242

sqlstate:42713

SQL0243N

不能为指定的 SELECT 语句定义 SENSITIVE 游标 游标名 游标 游标名 已定义为 SENSITIVE,但 SELECT 语句的内容要求数据库管理器构建该游标的临时结果表,而数据库管理器无法保证在此游标外部进行的更改是可视的。 当查询的内容使结果表为只读时,就会发生这种情况。 例如,如果查询中包括连接,那么结果表是只读的。 在这些情况下,游标必须定义为 INSENSITIVE 或 ASENSITIVE。

无法处理该语句。

更改查询的内容以便产生不是只读的结果表,或者将游标的类型更改为 INSENSITIVE 或 ASENSITIVE。

sqlcode:-243

sqlstate:36001

SQL0244N

在 FETCH 上指定的 SENSITIVITY 灵敏度 对于游标 游标名 无效。

在 FETCH 上指定的灵敏度选项 灵敏度 与对游标 游标名 有效的灵敏度选项有冲突。 以下列表显示了在 FETCH 上可以指定的内容:


DECLARE CURSOR
FETCH Statement
INSENSITIVE         INSENSITIVE
SENSITIVE STATIC    SENSITIVE
                    or INSENSITIVE
SENSITIVE DYNAMIC   SENSITIVE
SENSITIVE           SENSITIVE
ASENSITIVE          INSENSITIVE
                    or SENSITIVE
                    (depending on the
                     effective
                     sensitivity of the
                     cursor)

对于不可滚动游标,不能指定灵敏度选项。

无法处理该语句。

更改或移除在 FETCH 上指定的灵敏度选项。

sqlcode:-244

sqlstate:428F4

SQL0245N

对 例程名 例程的调用具有多义性。 位于位置 位置 的自变量没有最佳匹配。 在 SQL 语句中引用例程时,数据库管理器必须准确地确定所要调用的例程。 对于函数而言,此过程称为“函数解析”,它既适用于内置函数也适用于用户定义的函数。 当函数调用存在多义性时,将返回此错误。 如果可能有两个或更多候选函数满足函数解析的条件,就会发生这种情况。

在这种情况下,这两个候选函数在位置 position 中都有参数,但是它们的参数的数据类型不在同一个数据类型优先顺序列表中。 将无法确定自变量的最佳匹配。

更改 SQL 语句以将此自变量显式强制类型转换为期望的数据类型、函数的定义或 SQL 路径,以消除这一组候选函数之间的多义性,然后再次尝试调用此函数。

sqlcode:-245

sqlstate:428F5

SQL0257N

不支持原始设备容器。 尝试了使用原始设备容器,但是存在下面的其中一种情况:

  • 原始设备在此平台上不受支持。
  • 无法通过 SET TABLESPACE CONTAINERS 命令为自动调整大小的表空间指定原始设备容器。
  • 原始设备容器在 DB2 pureScale 环境中不受支持。
在 DB2 pureScale 环境中:

不需要任何响应。 在 DB2 pureScale 环境中,不能使用原始设备容器。

在非 DB2 pureScale 的环境中:

  • 如果要创建表空间,那么改为使用文件容器或者系统管理的表空间。
  • 如果要指定 SET TABLESPACE CONTAINERS 命令,那么改为使用文件容器。

sqlcode:-257

sqlstate:42994

SQL0258N

当表空间的重新平衡操作处于暂挂状态或者正在进行时,既不能执行容器操作,也不能执行 REBALANCE。 下列其中一个条件为真:

  1. 涉及到容器操作或者 REBALANCE 子句的 ALTER TABLESPACE 语句先前已经由此应用程序或另一应用程序发出,但仍须落实。
  2. 正在进行重新平衡。
作出适合于情况的响应:

  1. 如果可能,那么回滚未落实的工作单元并发出单个 ALTER TABLESPACE 语句以执行所有容器操作。 否则,等待到重新平衡完成,然后再次尝试执行该操作。 注意,不能在同一 ALTER TABLESPACE 语句的表空间中添加和移除页。
  2. 等到重新平衡完成,然后再次尝试执行该操作。

sqlcode:-258

sqlstate:55041

SQL0259N

表空间的容器映射太复杂。 映射结构保存表空间地址空间如何映射至各种容器的记录。 如果这过于复杂,那么不适合于表空间文件。 可能需要重新平衡表空间,以在容器中更均匀地分布数据。 这可能简化映射。

如果这不起作用,那么尝试将使尽可能多的容器大小相同。 现有的容器大小可通过备份表空间,然后使用数据库管理实用程序更改容器的方法来改变。 将表空间复原为新容器。

sqlcode:-259

sqlstate:54037

SQL0260N

列 列名 不能属于分布键或表分区键,因为它是 LONG 列、DATALINK 列、XML 列、结构化类型列或已隐式添加到支持跟踪行修改的表的系统隐藏列。 分布键和表分区键都不能具有 LONG 列、DATALINK 列、XML 列、结构化类型列或已隐式添加到支持跟踪行修改的表的系统隐藏列。

无法处理该语句。

不要将 LONG 列、DATALINK 列、XML 列、结构化类型列或隐式添加的系统隐藏列用于分布键或表分区键。

如果表需要成为分布式表,而它只具有 LONG 列、DATALINK 列、XML 列、结构化类型列或隐式添加的系统隐藏列,请向该表添加可用于分布键的列,或者在单一分区数据库分区组中定义没有分布键的表。

如果表需要成为分区表,而它只具有 LONG 列、DATALINK 列、XML 列或结构化类型列,请添加可以用于该表的分区键的列,或者定义非分区表。

sqlcode:-260

sqlstate:42962

SQL0262N

无法在数据库分区组 table-name 中创建表 group-name ,因为不存在可用作分布键的列。 不能在数据库分区组中创建表 表名。 表必须至少有一列可用作分布键。 不能在分布键中使用下列数据类型的列:

  • BLOB
  • CLOB
  • DATALINK
  • DBCLOB
  • LONG VARCHAR
  • LONG VARGRAPHIC
  • XML
  • 结构化类型
  • 基于前面列示的任何数据类型的用户定义的数据类型

无法处理该语句。

使用一个或多个可在分布键中使用的列创建表,或在单个数据库分区组中创建表。

sqlcode:-262

sqlstate:428A2

SQL0263N

从 成员编号-1 到 成员编号-2 的成员范围无效。 第二个成员编号必须大于或等于第一个成员编号。 所指定的成员范围无效。

无法处理该语句。

请更正该语句中的成员范围,然后再次尝试该请求。

sqlcode:-263

sqlstate:428A9

SQL0264N

不能添加或删除分区键,因为表驻留在一个定义于多分区数据库分区组 名称 上的表空间中。 只能添加或删除一个位于单个数据库分区组中的表上的分区键。

无法处理该语句。

执行下列其中一项操作并再次尝试该请求:

  • 用分区键定义一个相同的表。
  • 将数据库分区组重新分发至单个数据库分区组。

sqlcode:-264

sqlstate:55037

SQL0265N

在数据库分区号列表中检测到重复的成员编号或者数据库分区号。 对于 CREATE DATABASE PARTITION GROUP 语句,一个数据库分区号在 ON DBPARTITIONNUMS 子句中只能出现一次。

对于 CREATE TABLESPACE 和 ALTER TABLESPACE 语句,数据库分区号只能出现一次,并且只能出现在一个 ON DBPARTITIONNUMS 子句中。

对于 ALTER DATABASE PARTITION GROUP 语句或 REDISTRIBUTE DATABASE PARTITION GROUP 命令,发生了下列其中一种情况:

  • 数据库分区号多次出现在 ADD DBPARTITIONNUMS 或 DROP DBPARTITIONNUMS 子句中。
  • 数据库分区号既出现在 ADD DBPARTITIONNUMS 子句中,又出现在 DROP DBPARTITIONNUMS 子句中。
  • 要添加的数据库分区号已经是数据库分区组的成员。

无法处理该语句。

对于调用 WLM_ALTER_MEMBER_SUBSET 语句,要添加的成员已经是成员子集的成员。

请确保 ON DBPARTITIONNUMS、ADD DBPARTITIONNUMS 或 DROP DBPARTITIONNUMS 子句中的数据库分区名或者数据库分区号是唯一的。 对于 CREATE TABLESPACE 和 ALTER TABLESPACE 语句,请确保数据库分区号不在多个 ON DBPARTITIONNUMS 子句中出现。

此外,对于 ALTER DATABASE PARTITION GROUP 语句或 REDISTRIBUTE DATABASE PARTITION GROUP 命令:

  • 请不要同时在 ADD DBPARTITIONNUMS 和 DROP DBPARTITIONNUMS 子句中指定数据库分区号。
  • 如果在数据库分区组中已经定义了该数据库分区号,请从 ADD DBPARTITIONNUMS 子句中移除此数据库分区号。

对于调用 WLM_ALTER_MEMBER_SUBSET 语句,请将该成员号从成员列表中移除。

sqlcode:-265

sqlstate:42728

SQL0266N

所指定的成员编号或者数据库分区号 成员编号 无效。 所指定的成员编号或数据库分区号 成员编号 由于下列其中一种原因而无效:

  • 此成员编号或数据库分区号不在有效范围 0 到 999 之内。
  • 此成员编号或数据库分区号不在配置文件中。
  • 此成员编号或数据库分区号不是数据库分区组的一部分,因此无法处理所请求的操作。
  • 该语句引用了事件监视器,而该事件监视器已定义为要在此实例中不存在的成员上运行。
  • WLM_ALTER_MEMBER_SUBSET 语句中指定的成员编号不在成员子集中。

无法处理该语句。

根据情况:

  • 使用位于有效范围内的成员编号或数据库分区号发出语句、命令或 API。
  • 遵循将成员或数据库分区添加至系统的过程。
  • 在语句、命令或 API 中,从所指定的成员或数据库分区中移除此成员或数据库分区。
  • 删除该语句所引用的事件监视器。
  • 重新输入 WLM_ALTER_MEMBER_SUBSET 语句并在其中指定成员子集中存在的成员编号。

sqlcode:-266

sqlstate:42729

SQL0268N

当正在重新分发数据库分区组时,不能执行 操作

下列其中一项适用,由 操作 指示:

  • 正在重新分发数据库分区组,在完成当前操作之前,不能再次改变、删除或重新分发该数据库分区组。
  • 当正在重新分发表的数据库分区组时,不能删除该表的分区键。
  • 不能创建新对象,因为 REDISTRIBUTE 正在删除此数据库分区组中所有旧的数据库分区。
  • 不能通过 ALTER TABLE 来添加新列,因为 REDISTRIBUTE 正在删除此数据库分区组中所有旧的数据库分区。

无法处理该语句。

等到完成重新分发之后再次尝试该请求。

sqlcode:-268

sqlstate:55038

SQL0269N

数据库包含最大分区映射数。 由于数据库包含最大分区映射数(32,768),因此不能创建新的数据库分区组、改变数据库分区组或重新分发现有数据库分区组。

无法处理该语句。

删除数据库中的一个或多个数据库分区组。

注意:删除数据库分区组将删除驻留在该数据库分区组中的所有数据库对象(例如,表空间、表和视图)。

sqlcode:-269

sqlstate:54033

SQL0270N

功能不受支持(原因码 = Reason-code)。 因为该语句违反下列原因码所指示的限制,所以不能对其进行处理:

1
主键、每个唯一约束以及每个唯一索引都必须包含表的所有分布列。
2
不支持更新分布键列值。
3
如果定义外键时指定了 ON DELETE SET NULL,那么它不能包含任何可空分布键列。 由于定义这样的约束将导致尝试更新分布键列,因此这是原因码 2 的特殊情况。
5
用 WITH CHECK OPTION 子句创建的视图不应使用这样的函数(或者使用这样的函数的引用视图):

  • 不确定
  • 具有副作用
  • 与数据布局相关,例如节点号或分区函数

如果创建新视图时指定了 CASCADED 检查选项,那么这些函数也不能存在于所引用的视图中。

6
不能为用户定义的单值类型定义变换。
7
只能使用页大小为 4 KB 的表空间来定义长字段。 只能使用 4 KB 页大小来创建大型表空间(LARGE TABLESPACE)。
8
在 DB2 V7.1 之前,不支持结构化类型作为表或结构化类型属性数据类型的列。
9
在类型表上不支持触发器。
10
不能选择单个缺省表空间,因为该表包含一个或多个 LOB 列,这些列必须放在页大小为 4 KB 的表空间中,但是该表中的行大小或列数要求表空间的页大小为 8 KB。
11
不能使用没有属性的结构化类型来创建类型表或带类型视图。
12
源键参数的类型必须是用户定义的结构化类型或者并非源于 LOB、XML、LONG VARCHAR 或 LONG VARGRAPHIC 数据类型的单值类型。
13
不能在类型表上定义检查约束,也不能在带类型视图上指定 WITH CHECK OPTION 子句。
14
不能对类型表定义引用约束或将其定义至作为类型表的父表。
15
不能对引用类型列定义缺省值。
16
在 DB2 UDB V7.1 之前,引用数据类型或结构化数据类型不能用作用户定义的函数的参数数据类型或返回数据类型。 否则,有限制的引用数据类型或数组数据类型不能用作例程的参数数据类型或返回数据类型。 结构化数据类型或数组数据类型不能用作表或行函数的返回列。
17
SET INTEGRITY 语句不能用于类型表。
18
不能授予对类型表、带类型视图或昵称的列级别 UPDATE 和 REFERENCES 特权。
19
定义类型表的列的缺省值时,必须指定缺省值。
20
具体化查询表不支持 ALTER TABLE。
21
无法删除具体化查询表的基本表中的列,也不能改变其长度、数据类型、安全性、可空性或隐藏属性。
22
不能在 CREATE SCHEMA 语句中定义具体化查询表。
23
只能对使用 REFRESH DEFERRED 定义的具体化查询表指定 REPLICATED。
24
BEFORE 触发器中的触发操作不能引用使用 REFRESH IMMEDIATE 定义的具体化查询表。
25
只能对 SET INTEGRITY 语句指定一个具体化查询表。
26
正在重新分发的数据库分区组至少包含一个复制型具体化查询表。
27
要对一个表定义复制型具体化查询表,该表必须对构成该复制型具体化查询表的一列或多列定义唯一索引。
28
不能重命名类型表或具体化查询表。
29
不能在 SET INTEGRITY 语句中对具体化查询表指定 FOR EXCEPTION 子句。
30
不能在 CREATE SCHEMA 语句中定义类型表和带类型视图。
31
不能将分布键定义为包含 500 个列以上。
32
在非目录分区上使用多分区数据库分区组或者单一分区数据库分区组定义的表不支持使用 FILE LINK CONTROL 定义的 DATALINK 列。
33
使用 REFRESH IMMEDIATE 定义的具体化查询表的底层表不能是具有级联效果(即,指定了选项 ON DELETE CASCADE 或 ON DELETE SET NULL)的引用约束的子代。
34
底层对象关系功能部件在当前发行版中不受支持。
35
在 V7 多节点数据库环境中,不能创建序列或标识列。
36
不允许激活包含序列或标识列的多节点 V7 数据库。
38
在 DB2 UDB V8.1 修订包 6 以前,在多分区数据库分区组中不支持使用索引扩展的索引。
39
在 SQL 函数或 SQL 方法的主体中,不能直接或间接引用昵称或 OLE 数据库表函数。
40
不能在触发器或 SQL 函数中使用函数 IDENTITY_VAL_LOCAL。
41
单一 SQL 变量语句不能同时对局部变量和转换变量进行赋值。
42
在多节点数据库中,不允许执行使用了 SQL 控制语句的触发器、方法或函数,也不允许执行动态复合语句。
43
一个或多个指定的选项当前不受支持。
44
在 MPP、SMP 和 Data Joiner 中,不支持下列 EXPLAIN MODES:

  • COUNT CARDINALITIES
  • COMPARE CARDINALITIES
  • ESTIMATE CARDINALITIES
45
多维集群 (MDC) 或插入时集群 (ITC) 表不支持 APPEND 方式。
46
多维集群 (MDC) 或插入时集群 (ITC) 表不支持 INPLACE 表重组。
47
多维集群 (MDC) 或插入时集群 (ITC) 表不支持索引扩展。
48
不支持对多维集群 (MDC) 表的维规范进行更改。
49
多维集群 (MDC) 或插入时集群 (ITC) 表不支持集群索引。
50
用户定义的临时表不能是多维集群 (MDC) 或插入时集群 (ITC) 表。
51
当数据库分区不是目录数据库分区时,不支持从该数据库分区发出影响基于表达式的索引的 DDL 操作。
52
如果生成列是分布键列,或者在 ORGANIZE BY 子句、PARTITION BY 子句或 DISTRIBUTE BY 子句中使用了生成列,那么不能修改它的表达式,也不能将它的表达式添加至不是使用表达式生成的列。
53
不能在可滚动游标的选择列表中指定具有 LONG VARCHAR、LONG VARGRAPHIC、LOB 或 XML 类型、基于任何这些类型的单值类型或者结构化类型的列。
54
指定的系统目录表不支持 INPLACE 表重组。
55
联合数据库系统支持和集中器功能不能同时处于活动状态。
56
处于 ALLOW WRITE 方式的空间索引不支持以重建方式进行联机索引重组。
57
仅当指定了 CLEANUP 选项或 RECLAIM EXTENTS 选项时, 才支持对处于 ALLOW WRITE 方式的多维集群 (MDC) 或插入时集群 (ITC) 表执行联机索引重组。
58
对于 V8 数据库:XML 数据类型只能用作瞬时数据类型,并且不能存储在数据库中或者返回到应用程序。
59
在分区数据库环境中,不能使用包含 SQL 语句的函数或方法。
60
不允许使用 ALTER TABLE ALTER COLUMN SET INLINE LENGTH 语句,因为有一个类型为 VIEW 的对象(无论是类型对象还是隐式类型对象)依赖于类型表。
61
不能在表达式中对检查约束或生成列使用文本搜索功能。
62
WITH CHECK OPTION 子句不能与直接引用了文本搜索功能的视图配合使用,也不能与依赖于其他引用了文本搜索功能的视图的视图配合使用。
63
不能在不灵敏可滚动游标的选择列表中指定带有 LOB 类型、LOB 类型上的单值类型的列,也不能指定带有 LONG VARCHAR、LONG VARGRAPHIC、DATALINK、LOB、XML 类型、任何这些类型上的单值类型或结构化类型的列。
64
在此平台上不支持联合处理。
65
不允许将昵称本地类型从当前类型改变为指定的类型。
66
内置变换组 SYSSTRUCT 不受支持。
67
不能指定昵称或基于昵称的视图作为 MERGE 或 UPDATE 语句中的目标。
68
在分区数据库中,SQL 语句中支持的最大单值 NEXT VALUE 表达式数是 55。
69
从视图删除将导致派生表通过多个路径删除连接至视图定义中出现的两个或多个表。 将根据不能保证的最终结果触发在派生表上定义的检查约束或触发器。
70
如果一个表是为了进行查询优化而启用的视图的基本表,那么不能删除该表的列,也不能改变列的长度、数据类型、安全性或可空性。
71
在分区数据库环境中,不能在触发器、SQL 函数、SQL 方法或动态复合语句中使用 CALL 语句。
72
不能更改可空列以成为标识列。
73
分区数据库环境中的备份映像不允许包括日志。
74
不允许按时间戳记更新恢复历史记录文件中的状态字段。
75
多数据库分区系统、启用了 SMP 的系统或联合系统不支持自动统计信息概要分析功能。
83
对于 V9.7 以前的 DB2 数据库版本,由于 DATA CAPTURE CHANGES 与 COMPRESS YES 不兼容,因此无法处理该语句。
87
不能将下列类型的表定义为分区表:类型表、登台表、用户临时表和范围集群表。
89
只有分区表的非分区索引或 CLEANUP ONLY ALL 选项才支持 REORG INDEX。
90
对于 V9.7 以前的 DB2 数据库版本,由于不支持分区索引,因此不能对 CREATE INDEX 语句指定 PARTITIONED 子句。
91
对于 V9.7 以前的 DB2 数据库版本,由于具有压缩字典的表不支持 DATA CAPTURE CHANGES,因此无法处理该语句。
92
不允许与作为已强制的引用完整性约束的父代的表拆离。
93
对于包含使用 LOAD INSERT 追加的数据并且具有从属具体化查询表或从属登台表(尚未对追加的数据而增量式刷新这些表)的分区,不允许拆离分区。
95
不能将尚未验证连接分区完整性的表更改为具体化查询表。
97
对于多节点分布键、数据分发键或 MDC 组织维的元素而言,不支持更改此数据类型。
98
不支持改变标识列的类型。
99
改变表集数据类型时更改了检查约束所使用的外部 UDF。
102
不能对类型表添加安全策略。
103
在数据库服务器 V9.5 和更低版本上,不支持以 ALLOW WRITE 方式对带有 XML 列的表执行联机索引重组。
104
如果对表定义基于 XML 列的索引,那么不允许执行原地表重组(REORG)。
105
只有处于 CLEANUP 或 RECLAIM EXTENTS 方式的块索引才支持 REORG INDEX 命令。
106
不支持将分区连接到具体化查询表。
109
如果文本搜索功能未直接引用分区表,或者它是包含 OUTER JOIN 子句的子查询的成员,那么不能应用于分区表的文本索引。
110
对于 SECLABEL、SECLABEL_BY_NAME 和 SECLABEL_TO_CHAR,安全策略名称参数必须是一个字符串常量。
111
审计策略无法与类型表相关联。
112
运行状况监视器不支持对非 root 用户安装版本配置操作和通知。
113
在分区数据库环境中,不支持在触发器或 SQL 表函数的主体中使用复合 SQL(编译型)语句。
114
不支持分区空间索引。
115
无法重新验证此函数。
116
您将同一个名称用于动态准备或执行的复合 SQL(编译型)语句中的多个指定参数标记。
119
如果 ROW 变量字段具有 ARRAY 类型,那么通过在 ROW 变量字段引用中指定元素的相应索引值无法直接检索到数组元素值。 也不能使用该字段直接调用收集方法。
120
尝试将数据插入至不受支持的类型的表。
121
由行组成的表的周期定义不能包含 MAINTAINED BY USER 子句。
122
由列组成的表的周期定义必须包含 MAINTAINED BY USER 子句。
123
除非禁用自动重组重新压缩,否则无法运行该命令。
124
不支持对专用目录成员发出 DML 或操作。
125
先决条件目录格式更改尚未应用此数据库。
126
不能将支持跟踪行修改的表的系统隐藏列 SYSROWID、CREATEXID 和 DELETEXID 指定为索引键的一部分。
127
SET TENANT 语句在例程中不受支持。
128
此操作在用户定义的租户中不受支持。
129
注册表变量 DB2_BLOCK_REORG_PENDING 设置为 ON,这将防止执行任何会导致表处于 REORG 暂挂状态的 ALTER TABLE 语句。
130
对于在 BEFORE 触发器的主体中使用复合 SQL(编译型)语句的表,不支持 SKIP LOCKED DATA 子句。
131
所请求的功能在此配置或环境中不受支持。
132
此操作仅在缺省系统租户中受支持。
与原因码对应的操作如下所示:

1
更正 CREATE TABLE、ALTER TABLE 或 CREATE UNIQUE INDEX 语句。
2
不要尝试更新多分区表的分布键列,或者考虑先删除然后再插入分布列包含新值的行。
3
使分布键列不可空,指定另一 ON DELETE 操作,或者更改表的分布键以使外键不包括分布键的任何列。
4
指定 DATA CAPTURE NONE,或者确保将表放入指定了目录分区的单一分区数据库分区组中的表空间。
5
不要使用 WITH CHECK OPTION 子句,或者从视图定义中移除该函数或视图。
6
对于用户定义的单值类型,变换是自动的。 仅对用户定义的结构化类型使用 CREATE TRANSFORM 语句。
7
对任何包含长字段的表,使用页大小为 4 KB 的表空间。 如果正在使用 DMS 表空间,那么可以将长字段放入页大小为 4 KB 的表空间,并将其他表或索引数据放入具有另一页大小的表空间。 当定义 LARGE TABLESPACE 时,使用 PAGESIZE 4K。
8
对于 DB2 UDB V7.1 以前的服务器,请确保 CREATE TABLE 语句或 ALTER TYPE ADD COLUMN 语句中没有任何列数据类型是结构化类型。 确保在 CREATE TYPE 语句或 ALTER TYPE ADD ATTRIBUTE 语句中没有属性数据类型是结构化类型。
9
不要在类型表上定义触发器。
10
减小表中的行大小或列数,或者指定两个表空间,以便将长数据放入页大小为 4 KB 的表空间,并将基本数据放入页大小为 8 KB 的表空间。
11
当创建类型表或带类型视图时,指定至少定义了一个属性的结构化类型。
12
对于源键参数的类型,仅使用用户定义的结构化类型或者并非源于 LOB、XML、LONG VARCHAR 或 LONG VARGRAPHIC 类型的单值类型。
13
在类型表的 CREATE TABLE 或 ALTER TABLE 语句中,不要指定检查约束。 在带类型视图的 CREATE VIEW 语句中,不要指定 WITH CHECK OPTION 子句。
14
不要在 CREATE TABLE 或 ALTER TABLE 语句中指定涉及类型表的引用约束。
15
不要在 CREATE TABLE 或 ALTER TABLE 语句中对具有引用数据类型的列指定 DEFAULT 子句。
16
对于 DB2 UDB V7.1 以前的服务器,在创建用户定义的函数时,请不要指定结构化类型参数或返回类型。 或者,不要将有限制的引用类型指定为参数或返回类型。 不要将结构化类型指定为表或行函数的返回列。
17
不要在 SET INTEGRITY 语句中指定类型表。
18
当授予对类型表、带类型视图或昵称的 REFERENCES 或 UPDATE 特权时,不要包括特定列名。
19
当在类型表的列上指定 DEFAULT 子句时,包括特定值。
20
删除该具体化查询表,然后进行重新创建并指定所需的属性。
21
要删除或变更具体化查询表的基本表中包含的列,请执行下列步骤:

  1. 删除从属具体化查询表。
  2. 删除基本表的一列,或者改变此列的长度、数据类型、可空性或隐藏属性。
  3. 重新创建具体化查询表。
22
在 CREATE SCHEMA 语句外发出 CREATE SUMMARY TABLE 语句。
23
移除 REPLICATED 规范,或者确保为具体化查询表定义指定了 REFRESH DEFERRED。
24
在 BEFORE 触发器中的触发操作中移除对具体化查询表的引用。
25
为每个具体化查询表发出单独的 SET INTEGRITY IMMEDIATE CHECKED 语句。
26
删除数据库分区组中的所有复制型具体化查询表,然后再次发出 REDISTRIBUTE DATABASE PARTITION GROUP 命令。 重新创建复制型具体化查询表。
27
确保为具体化查询表定义的各个列的某个子集也是组成基本表的唯一索引的一组列。
28
要更改类型表或具体化查询表的名称,必须删除该表,然后使用新名称重新创建该表。 删除该表可能意味着,其他依赖于该表的对象以及对该表的特权将丢失。
29
从 SET INTEGRITY 语句中移除 FOR EXCEPTION 子句。
30
在 CREATE SCHEMA 语句外部对带类型视图或类型表发出 CREATE 语句。
31
减少分布键中的列数。
32
对 DATALINK 列指定 NO LINK CONTROL,或者将该表放入指定了目录分区的单一分区数据库分区组的表空间。 如果正在将数据重新分发至多分区数据库分区组,那么必须删除该表才能继续重新分发。
33
使用下列其中一种方法:

  • 定义具有级联效果(即,指定了选项 ON DELETE CASCADE 或 ON DELETE SET NULL)的引用约束时,不要将其子代定义为使用 REFRESH IMMEDIATE 定义的具体化查询表的底层表。
  • 定义 REFRESH IMMEDIATE 具体化查询表时,不要将其底层表定义为具有级联效果(即,指定了选项 ON DELETE CASCADE 或 ON DELETE SET NULL)的引用约束的子代。
34
移除对任何不受支持的对象关系功能部件的使用。
35
请勿创建或移除 GENERATED [ALWAYS | BY DEFAULT] AS IDENTITY … 属性。
36
删除新节点,以便还原为单节点配置。 如果需要更多节点,请先删除包含标识列的序列或表,然后再添加新节点。
38
不能在多分区数据库分区组中的表上创建使用索引扩展的索引。 当数据库分区组中的表上存在使用索引扩展的索引时,数据库分区组不能成为多分区数据库分区组。 删除任何这样的索引并将分区添加至数据库分区组(在此情况下,不能重新创建索引),或者不更改数据库分区组。
39
移除对昵称或 OLE 数据库表函数的引用,或者移除对间接引用了昵称或 OLE 数据库表函数的对象的引用。
40
从触发器定义或 SQL 函数定义中移除对 IDENTITY_VAL_LOCAL 函数的调用。
41
将该赋值分割成两个单独的语句。 其中一个语句必须只对 SQL 变量赋值,而另一个语句必须只对转换变量赋值。
42
删除新节点,以便还原为单节点配置。 如果需要更多节点,那么必须删除包含控制语句的触发器、函数或方法。
43
重新发出 RUNSTATS 命令并关闭不受支持的选项。
44
在 SMP、MPP 和 Data Joiner 环境中,不能使用这些 EXPLAIN 方式。 有可能时,请以串行方式运行查询。 否则,将 EXPLAIN 方式设置为 YES 或 EXPLAIN,以便提供相同的信息(实际基数除外)。
45
不要在多维集群 (MDC) 或插入时集群 (ITC) 表的 ALTER TABLE 语句中指定 APPEND 子句。
46
重新发出 REORG 命令而不指定 INPLACE 选项。
47
不要在多维集群 (MDC) 或插入时集群 (ITC) 表的 CREATE INDEX 语句中指定 EXTENSION 子句。
48
删除该多维集群 (MDC) 表,然后使用经过修改的维规范重新创建该表。
49
不要在多维集群 (MDC) 或插入时集群 (ITC) 表的 CREATE INDEX 语句中指定 CLUSTER 子句。
50
不要在声明的全局临时表的 CREATE TABLE 语句中指定 ORGANIZE BY 子句。
51
从目录数据库分区中发出 CREATE INDEX 语句。
52
不要修改该表达式或者将其添加至现有的列。 要更改 PARTITIONING KEY 子句、ORGANIZE BY 子句、PARTITION BY 子句和 DISTRIBUTE BY 子句或者其任何作为生成列的成员的生成表达式的组合,请删除并重新创建该表,然后重新填充。
53
修改可滚动游标的查询列表以不包括带有这些类型的列。
54
重新发出 REORG 命令而不指定 INPLACE 选项。
55
关闭集中器或联合数据库系统支持。 通过将数据库管理器配置参数 MAX_CONNECTIONS 的值设置为小于或等于数据库管理器配置参数 MAX_COORDAGENTS 的值,关闭集中器。 通过将数据库管理器配置中的 FEDERATED 参数设置为“否”来关闭联合数据库系统支持。
56
重新发出 REORG INDEXES 命令并指定 ALLOW NONE 或 ALLOW READ。
57
重新发出 REORG INDEXES 命令并指定 ALLOW NONE 或 ALLOW READ。
58
对于 V8 数据库:将 XML 数据输入到接受 XML 输入的其中一个函数(基本上是 XMLSERIALIZE)并将函数的输出存储在数据库中或将它返回到应用程序。
59
在分区数据库环境中,仅使用以 NO SQL 选项定义的函数或方法。
60
删除依赖于类型表的视图。 对类型表重新发出 ALTER TABLE ALTER COLUMN SET INLINE LENGTH 语句,然后重新创建您删除的视图。
61
不要在表达式中对检查约束或生成列使用文本搜索功能。 如果可能,使用 LIKE 功能而不是 CONTAINS。
62
不要对此视图指定 WITH CHECK OPTION 子句。
63
修改可滚动游标的查询列表以不包括带有这些类型的列。
64
不要在此平台上尝试联合处理。
65
不要尝试将昵称本地类型从当前类型变更为指定的类型。
66
不要指定 SYSSTRUCT 来作为变换组。
67
不要指定昵称或基于昵称的视图来作为 MERGE 或 UPDATE 语句中的目标。
68
减少语句中的单值 NEXT VALUE 表达式数,或更改为非分区数据库。
69
不要使用 DELETE FROM view-name。
70
禁用为查询优化而启用的视图、删除或改变基本表的列,然后启用这些视图以进行查询优化。
71
在分区数据库环境中,不要在触发器、SQL 函数、SQL 方法或动态复合语句中使用 CALL 语句。
72
列在它可空期间不能成为标识列。 要进行此更改,必须删除该表,然后重新创建该表并使其包含不可空列,接着进行重新填充。 此外,还可以考虑添加新列作为标识列。
73
在未指定 INCLUDE LOGS 选项的情况下发出 BACKUP 命令。
74
只能按 EID 更新恢复历史记录文件中的状态字段。
75
使用下列其中一种方法:

通过将数据库配置参数 AUTO_STATS_PROF 和 AUTO_PROF_UPD 设置为 OFF,对此数据库禁用自动统计信息概要分析功能。

将系统更改为位于单一数据库分区中并且未启用 SMP 的非联合系统。

83
如果同时指定了 DATA CAPTURE CHANGES 和 COMPRESS YES,那么必须仅指定它们的其中一个。 如果指定了 DATA CAPTURE CHANGES 或 COMPRESS YES 的其中一个,那么在其中一个在表中已生效的情况下不能再指定另一个。
87
将表创建为非分区表。
89
使用 REORG INDEXES ALL 命令来重组表或数据分区的所有索引。
90
通过使用缺省值或者通过在 CREATE INDEX 中显式地指定 NOT PARTITIONED,创建非分区索引。
91
不要对此表指定 DATA CAPTURE CHANGES。
92
使用以下语句来删除引用约束:

ALTER TABLE 'child-table' 
DROP CONSTRAINT ... 

此外,也可以更改外键关系中的子表,以便不强制实施外键约束:

ALTER TABLE 'child-table' 
ALTER FOREIGN KEY ... NOT ENFORCED 

注:从外键约束中的父表执行了失败的 DETACH 语句,而在子表上执行了约束强制实施。 除非外键约束是自引用约束,否则这两个表截然不同。 接下来,重新提交 ALTER TABLE … DETACH PARTITION 语句。 您现在就可以变更子表以强制实施外键约束:

ALTER TABLE 'child-table' 
ALTER FOREIGN KEY ... ENFORCED 

这将重新检查这些表,以确保保持实施外键关系。

93
发出带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY 语句,以便对使用 LOAD INSERT 追加的数据维护从属具体化查询表或从属登台表。
95
对表发出带有 IMMEDIATE CHECKED 或 IMMEDIATE UNCHECKED 选项的 SET INTEGRITY 语句,以验证相连接的分区的完整性。
97
不要更改列数据类型。
98
删除标识属性,更改类型,然后重新启用标识属性。
99
删除检查约束,然后重新发出 ALTER 语句。
102
不要对类型表添加安全策略。
103
在数据库服务器 V9.5 和更低版本上,重新发出 REORG INDEXES 命令并指定 ALLOW READ ACCESS 或 ALLOW NO ACCESS。
104
除去 INPLACE 选项并重新发出 REORG TABLE 命令。
105
重新发出指定了 CLEANUP 或 RECLAIM EXTENT 的 REORG INDEX 命令,或者发出 REORG INDEXES ALL 以便对表的所有索引(包括块索引)进行重组。
106
在尝试将该分区连接到表之前,发出 ALTER TABLE 语句以从该表中删除具体化查询属性。
109
修改查询,以将文本搜索功能放在直接引用包含文本索引但不包含 OUTER JOIN 子句的分区表的子查询中。
110
为安全策略名称参数提供一个字符串常量。
111
不要使审计策略与类型表相关联。
112
在非 root 用户安装版本中,不要尝试为运行状况监视器配置操作或通知。
113
如果可行,请使用复合 SQL(直接插入型)语句定义触发器或函数,或者移除触发器或函数定义。
114
通过在 CREATE INDEX 语句中使用 NOT PARTITIONED 子句,创建空间索引作为非分区索引。
115
记录 SYSCAT.ROUTINEAUTH 中授予该函数的特权,删除该函数,将其重新创建,然后再将那些特权授予该函数。
116
请对动态准备或执行的复合 SQL(编译型)语句中的每个所指定参数标记指定唯一的名称。
119
将 ARRAY 字段分配给 ARRAY 变量。
120
无需进行任何响应。 目前不支持插入至此类型的表。
121
不要对此表添加 MAINTAINED BY USER 子句。
122
对此表添加 MAINTAINED BY USER 子句。
123
要禁用自动重组重新压缩,请与 IBM 支持机构联系。
124
对非目录成员发出该语句或操作。
125
遵循已归档的过程将目录格式更改应用于此数据库。
126
不将系统隐藏列包含在索引或约束中。
127
确保不在例程中执行 SET TENANT 语句。
128
使当前连接与缺省系统租户相关联,然后重试此操作。
129
将注册表变量 DB2_BLOCK_REORG_PENDING 设置为 OFF,然后发出 ALTER TABLE 语句。 表将处于 REORG 暂挂状态,直到再次对表执行带有 CLASSIC 选项的 REORG TABLE 为止。
130
如果可能,使用复合 SQL(直接插入型)语句来定义 BEFORE 触发器。
131
有关所请求功能的任何限制,请参阅 Db2 文档,以确定哪项功能相关。
132
使当前连接与缺省系统租户相关联,然后重试此操作。

sqlcode:-270

sqlstate:42997

SQL0271N

FID 为 fid 的表的索引文件丢失或无效。 在处理期间,fid 为 fid 的表的索引文件是必需的。 文件丢失或无效。

无法处理该语句,且应用程序仍连接至数据库。 此情况不影响没有使用此表上的索引的其他语句。

确保所有用户已与数据库断开连接,然后对所有节点发出 RESTART DATABASE 命令。 然后再次尝试该请求。

在重新启动数据库时已重新创建该索引(或多个索引)。

sqlcode:-271

sqlstate:58004

SQL0276N

连接失败,因为数据库处于“复原暂挂”状态或“升级暂挂”状态。 数据库名称:数据库名称 可能会由于以下两个原因而返回此消息:

1. 数据库处于“复原暂挂”状态
因为先前操作,数据库处于“复原暂挂”状态。 数据库处于“复原暂挂”状态时,连接至该数据库的尝试将失败。
2. 数据库处于“升级暂挂”状态
如果 db2ckupgrade 实用程序发现数据库已准备好升级,那么 db2ckupgrade 实用程序会将只读数据库配置参数 UPGRADE_PENDING 设置为 1。 如果此数据库配置参数设置为 1,那么此数据库被视为处于“升级暂挂”状态。 数据库处于“升级暂挂”状态时,连接至该数据库的尝试将失败。
  1. 如果数据库配置参数 UPGRADE_PENDING 设置为 1,请通过下列其中一种方式作出响应:
    • 等待至数据库完成升级,然后连接至该数据库。
    • 通过发出带 -resetUpgradePending 参数的 db2ckupgrade 命令以使数据库脱离“升级暂挂”状态,然后连接至该数据库。
  2. 否则,复原数据库,然后连接至该数据库。

sqlcode:-276

sqlstate:08004

SQL0279N

在 COMMIT 或 ROLLBACK 处理期间,已终止了数据库连接。 该事务可能为不确定事务。 原因码:原因码 落实处理遇到了错误。 该事务已置于落实状态,但落实处理可能未完成。 应用程序的数据库连接已终止。

原因码 指示了发生错误的原因:

1
涉及事务的节点或数据源已失败。
2
在其中一个节点上落实被拒绝。 查阅管理通知日志以了解详细信息。
确定引起错误的原因。 可能需要与系统管理员联系以获取帮助,因为该错误的最常见原因为节点故障或连接故障。 RESTART DATABASE 命令将完成对此事务的落实处理。

sqlcode:-279

sqlstate:08007

SQL0280W

视图、触发器或具体化查询表 名称 替换了现有的不可用视图、触发器或具体化查询表。

以下列内容替换了现有不可用视图、触发器或具体化查询表 名称

  • 新的视图定义(作为 CREATE VIEW 语句的结果)
  • 新的触发器定义(作为 CREATE TRIGGER 语句的结果)
  • CREATE SUMMARY TABLE 语句生成的新的具体化查询表定义。
不需要执行任何操作。

sqlcode:+280

sqlstate:01595

SQL0281N

因为表空间 表空间名 是系统管理的表空间,所以不能用其他容器来进行更改。 其他容器不可添加到系统管理的表空间。 这条规则的例外是,当修改数据库分区组以添加无表空间的节点时,可使用 ALTER TABLESPACE 命令在新节点上添加一次容器。 一般情况下,表空间必须由数据库管理以便添加其他容器。

无法处理该语句。

要将更多的容器添加至系统管理表空间,可删除并重新创建有更多容器的表空间,同时应确保每个容器大小相同且小于容器大小限制,或更改为 DMS 表空间。

sqlcode:-281

sqlstate:42921

SQL0282N

不能删除表空间 表空间名,原因是,它当中至少有一个表 表名,它的一个或多个部分在另一个表空间中。 指定的表空间中的表的所有部分不全包含在该表空间中。 如果指定了多个表空间,那么其中一个指定表空间中的表未在列表中包含其所有部分。 基本表、索引或长数据可能在另一表空间中,所以删除表空间将不会完全删除该表。 这将使该表处于不一致的状态,因而不能删除表空间。 在尝试删除表空间之前,确保表空间 表空间名 中包含的所有对象包含它们在此表空间中的所有部件,或者包括包含列表中要删除的部件的那些表空间。

这可能要求在删除表空间之前删除表 表名

sqlcode:-282

sqlstate:55024

SQL0283N

不能删除系统临时表空间 表空间名,因为它是数据库中页大小为 页大小 的唯一系统临时表空间。 数据库必须至少包含一个与目录表空间具有相同页大小的系统临时表空间。 删除表空间 表空间名 将从数据库中 移除最后一个页大小为 页大小 的系统临时表空间。 在尝试删除此表空间之前,确保数据库中有另一个页大小为 页大小 的系统临时表空间。

sqlcode:-283

sqlstate:55026

SQL0284N

表创建失败,因为在子句 clause 之后的语句中指定的表空间 tablespace-name 不是该子句支持的表空间类型。 表空间类型:表空间类型 如果尝试创建一个表,但要创建该表的表空间的类型不支持其属性,那么会返回此消息。

如果执行以下类型的 SQL 语句,那么会返回此消息:

  • CREATE TABLE
  • CREATE GLOBAL TEMPORARY TABLE
  • DECLARE GLOBAL TEMPORARY TABLE

可导致返回此消息的不兼容性种类的示例包括以下情况:

  • 尝试在表空间中创建常规表,但该表空间不是 REGULAR 或 LARGE 表空间。
  • 尝试在表空间中创建或声明临时表,但该表空间不是 USER TEMPORARY 表空间。
  • 尝试在表空间中创建插入时间集群 (ITC) 表,但该表空间并非由数据库表空间管理。
  • 尝试在表空间中创建按列组织的表,但该表空间未定义为 MANAGED BY AUTOMATIC STORAGE 并且没有关联存储器组。
更正该语句以对 子句 子句指定具有正确类型的表空间。

sqlcode:-284

sqlstate:42838

SQL0285N

表 table-name 的索引和/或长列不能分配给单独的表空间,因为主表空间 tablespace-name 是系统管理的表空间。 如果主表空间为系统管理表空间,那么必须在该表空间中包含所有表部分。 仅当主表空间、索引表空间和长表空间是数据库管理的表空间时,表的各部分才可以在单独的表空间中。 为主表空间指定一个数据库管理的表空间,或者不将表的各部分分配给另一个表空间。

sqlcode:-285

sqlstate:42839

SQL0286N

找不到页大小至少为 页大小 且许可授权标识 用户名 使用的表空间。 CREATE TABLE、CREATE GLOBAL TEMPORARY TABLE 或 DECLARE GLOBAL TEMPORARY TABLE 语句未指定表空间,找不到具有足够页大小(至少为 页大小),且具有正确类型(对于已创建的临时表或者已声明的临时表,为 USER TEMPORARY),而授权标识 用户名 对其具有 USE 特权的表空间。

表的足够页大小是由行的字节数或列数确定的。

确保存在具有正确类型(REGULAR 或 USER TEMPORARY),且页大小至少应为 页大小,并且授权标识 用户名 对其具有 USE 特权的表空间。

sqlcode:-286

sqlstate:42727

SQL0287N

SYSCATSPACE 不可用于用户对象。 CREATE TABLE 或 GRANT USE OF TABLESPACE 语句指定了一个名为 SYSCATSPACE 的表空间,而它是为目录表保留的。 指定一个不同的表空间名。

sqlcode:-287

sqlstate:42838

SQL0288N

语句失败,因为在指定 MANAGED BY SYSTEM 子句时无法定义大型表空间。 定义大型表空间来存储大对象和长字符串。 这些对象只能存储在定义为自动存储器的表空间中。

尝试将大型表空间建立为系统管理的表空间时,会返回此消息。

要解决此消息报告的问题,以下是您可以执行的某些操作示例:

  • 发出不带 LARGE 子句的 CREATE TABLESPACE 语句。
  • 发出带有 MANAGED BY AUTOMATIC STORAGE 子句语句的 CREATE TABLESPACE 语句。

sqlcode:-288

sqlstate:42613

SQL0289N

无法在表空间 表空间名 中分配新页面。 在一个或多个数据库分区上,下列其中一个条件为真:

1
分配给此 SMS 表空间的其中一个容器已达到最大文件大小。 这可能是导致该错误的原因。
2
分配给此 DMS 表空间的所有容器已满。 这可能是导致该错误的原因。
3
正在进行重新平衡,但其进度还不足以能使用新添加的空间。
4
正在对太小的容器进行重定向复原。
5
重定向复原后正在进行前滚且分配给此表空间的所有容器已满。
6
正在进行跳越添加容器的前滚且分配给此表空间的所有容器已满。
7
尝试创建带有小于 5 个可用扩展数据块的表空间。
8
自动调整大小表空间已达到其最大大小且所有容器都已满。 或者,容器的当前大小与最大大小之间没有足够的空间可扩展或添加,因此不能自动增大空间。
9
创建自动存储器表空间时,使用了不会导致容器空间平均分配的值作为初始值。 因此,使用了较高值但是此值大于指定的最大大小。
10
启用了自动调整大小的 DMS 表空间未达到其最大大小,但容器所在的其中一个文件系统已满,容器不能增大。
11
启用了自动调整大小的 DMS 表空间未达到其最大大小,且表空间所在的文件系统未满。 但是,正在进行容器操作(或后续的重新平衡)且自动调整大小功能被暂挂,直至操作完成为止。
执行与引起错误的原因对应的操作:

1
重新创建为 AUTOMATIC STORAGE 表空间或具有更多目录 (PATH) 的 SMS 表空间,例如:(目录数)>=(最大表大小 / 最大文件大小)或重新创建。 注意,最大文件大小与操作系统有关。 将表空间重新创建为 AUTOMATIC STORAGE 可让您使用存储器组。
2
将新容器添加至 DMS 表空间,并当重新平衡程序使新页可用后,再次尝试执行该操作。
3
等待重新平衡程序完成。
4
再次对较大的容器执行重定向复原。
5
再次对较大的容器执行重定向复原。
6
再次执行允许添加容器的前滚,或对较大的容器执行重定向复原。
7
重新提交 CREATE TABLESPACE 语句,确保表空间具有至少 5 个可用的扩展数据块。
8
增大表空间的最大大小。
9
减小表空间的初始大小或增大表空间的最大大小。
10
将新的容器分割集添加至表空间。 现有容器不会再增大,当进行自动调整大小时,只扩展表空间的最后范围中的那些新容器。
11
等待操作和后续的重新平衡完成。

sqlcode:-289

sqlstate:57011

SQL0290N

不允许访问表空间。 进程尝试访问一个处于无效状态的表空间,处于该状态的表空间不允许进行预期的访问。

  • 如果表空间处于停顿状态(“Quiesced: SHARE”、“Quiesced: UPDATE”或“Quiesced: EXCLUSIVE”),那么仅允许使表空间处于停顿状态的进程访问表空间。
  • 如果表空间处于其他任何状态,那么仅允许正在执行导致当前表空间状态操作的进程访问表空间。
  • 不能删除包含活动的系统临时表、已创建的临时表或者已声明的临时表的系统或用户临时表空间。
  • 除非表空间处于“复原暂挂”状态,否则不能使用 SET CONTAINER API 来设置容器列表。
可能的操作包括:

  • 如果表空间处于停顿状态,那么尝试获得表空间的停顿共享或停顿更新状态。 或者,尝试停顿复位表空间。
  • 如果表空间处于其他任何状态,那么在尝试访问表空间之前,请先等待表空间返回正常状态。

请参阅《管理指南》,以了解有关表空间状态的更多信息。

sqlcode:-290

sqlstate:55039

SQL0291N

表空间不允许状态过渡。 尝试更改表空间状态。 新状态与表空间当前状态不兼容,或者尝试关闭某种状态而表空间不处于该状态。 当进行备份、加载完成、前滚完成等时,表空间状态会发生变化, 这取决于表空间的当前状态。 请参阅系统管理指南,以了解有关表空间状态的更多信息。

sqlcode:-291

sqlstate:55039

SQL0292N

不能创建内部数据库文件。 不能创建内部数据库文件。 检查包含文件的目录是否可由数据库实例所有者访问(例如,安装)和写入。

sqlcode:-292

sqlstate:57047

SQL0293N

访问表空间容器时出错。 此错误可能是由下列其中一种情况引起的:

  • 找不到容器(目录、文件或原始设备)。
  • 容器未标记为由正确的表空间拥有。
  • 容器标记毁坏。

数据库启动期间和 ALTER TABLESPACE SQL 语句的处理期间可能会返回此错误。

尝试下列操作:

  1. 检查目录、文件或设备是否存在,并且是否已安装文件系统(如果它在单独的文件系统上)。 容器必须可由数据库实例所有者读写。
  2. 如果有新近的备份,那么尝试复原表空间或数据库。 如果由于坏容器以及容器不是 DEVICE 类型而失败,那么首先尝试手动移除容器。

如果处理带有 SWITCH ONLINE 选项的 ALTER TABLESPACE SQL 语句时返回此错误,请在解决问题之后重新发出该语句。

如果错误仍存在,请与 IBM 服务代表联系。

sqlcode:-293

sqlstate:57048

SQL0294N

容器已在使用中。 无法共享表空间容器。 导致此错误的可能原因包括下列各项。

  • CREATE TABLESPACE 或 ALTER TABLESPACE 语句包括了另一个表空间已在使用的容器。
  • CREATE TABLESPACE 或 ALTER TABLESPACE 语句包括了来自这样的表空间的容器:它已被删除但还未落实删除语句。
  • 用来添加数据库分区的 ALTER DATABASE PARTITION 语句使用了在同一物理数据库分区上的 LIKE 数据库分区的容器。 因此这些容器已在使用中。
  • CREATE TABLESPACE 或 ALTER TABLESPACE 语句正在尝试在单个物理数据库分区的多个逻辑数据库分区上使用同一容器。 不能将同一容器用于同一物理数据库分区上的多个数据库分区。
  • ADD DATABASE PARTITION 命令或 API 使用了来自同一物理数据库分区上 LIKE 数据库分区的系统临时表空间的容器。 因此这些容器已在使用中。
  • CREATE TABLESPACE 语句、ALTER TABLESPACE 语句或 CREATE DATABASE 命令包括了不再存在、但未正确删除的另一个数据库中的 DMS 容器。 该容器实际上未在使用中,但是它被标记为正在使用。 因此,在取消其标记之前,DB2 数据服务器将不允许对其进行使用。 但是,当取消其标记时,验证该容器是否未在被同一数据库或另一个数据库使用是很重要的。 取消容器的标记时,如果它正在使用中,那么所涉及的数据库将损坏。
  • REORG 尝试自动选择要使用的 DMS 临时表空间,虽然存在一个具有合适页面大小的 DMS 临时表空间,但它当前正被另一 REORG 命令使用。
  • REDISTRIBUTE 命令的 ADD DBPARTITIONNUM 选项(此选项用于添加数据库分区)将根据编号最小的数据库分区上的表空间的表空间容器名,来实现在新添加的数据库分区上创建表空间容器名。 如果这些容器名指定了绝对路径,并且新的数据库分区与使用相同容器名的数据库分区在同一物理设备上,那么已经在使用新分区的容器。
  • RESTORE DATABASE 命令在数据库中找到了不再存在、但是未正确删除的容器。
  • 为传输操作创建了临时登台数据库,然后尝试了在该临时登台数据库仍存在的情况下在目标数据库上创建表空间。
确保容器唯一。

  • 对于 CREATE 或 ALTER TABLESPACE 语句,对表空间指定不同的容器。
  • 对于包括来自已删除表空间的容器的 CREATE 或 ALTER TABLESPACE 语句,落实删除语句之后再次尝试,或指定不同的容器。
  • 对于 ALTER DATABASE PARTITION 语句,使用 WITHOUT TABLESPACES 子句重新发出该语句,然后使用 ALTER TABLESPACE 语句为新的数据库分区创建唯一的容器。
  • 对于环境包括一个物理数据库分区上多个逻辑数据库分区的 CREATE 或 ALTER TABLESPACE 语句,确保未对这样的逻辑数据库分区指定相同的容器。
  • 对于 ADD DATABASE PARTITION 命令或 API,使用 WITHOUT TABLESPACES 子句重新发出该语句,然后使用 ALTER TABLESPACE 语句在新数据库分区上为系统临时表空间创建唯一的容器。
  • 如果尝试使用一个属于不再存在但未正确删除的数据库的 DMS 容器,那么可以使用 db2untag 实用程序来从容器移除 DB2 容器标记。 当移除了此标记时,DB2 就认为该容器是可用的,且可以在 CREATE TABLESPACE 语句、ALTER TABLESPACE 语句或 CREATE DATABASE 命令中使用该容器。注意:使用 db2untag 时要特别小心。 如果您对数据库仍在使用的容器发出 db2untag 命令,那么最初使用该容器的数据库以及现在正在使用该容器的数据库都将毁坏。
  • 对于 REORG,一旦使用所需表空间的初始 REORG 完成,请重新提交该命令,或者提供另一具有合适页面大小的临时表空间供使用。
  • 对于 REDISTRIBUTE 命令,选择不使用 ADD DBPARTITIONNUM 选项,而是改为执行以下操作:在发出 REDISTRIBUTE 命令之前,发出附带了 WITHOUT TABLESPACES 子句的 ALTER DATABASE PARTITION GROUP 语句,然后使用 ALTER TABLESPACE 语句为新数据库分区创建唯一的容器。
  • 对于 RESTORE DATABASE 命令(容器属于一个不再存在、但是未正确删除的数据库),请移除此容器。注意:在移除容器之前,确保该容器没有正在被另一个数据库使用。
  • 如果为传输操作创建了临时登台数据库,那么在不再需要改临时登台数据库之后移除该登台数据库,然后在目标上尝试因存在该登台数据库而被阻止的操作。

sqlcode:-294

sqlstate:42730

SQL0295N

表空间所有容器名的组合长度太长。 存储容器列表所需的总空间超过在表空间文件中分配给此表空间的空间。

尝试下列一个或多个操作:

  • 使用符号链接、已安装文件系统等等来缩短新容器名。
  • 备份表空间,然后使用数据库管理实用程序,来减小容器的数量和/或名称长度。 将表空间复原为新容器。

sqlcode:-295

sqlstate:54034

SQL0296N

CREATE 语句失败,因为已达到此对象的数据库限制。 限制:限制数目。 对象类型关键字:对象关键字 如果在为数据库定义的该类型的数据库对象已经达到最大数目的情况下继续尝试创建数据库对象,就会返回此消息。 通过下列其中一种方式对此错误作出响应:

  • 删除同一类型的不再使用的任何数据库对象,然后重新发出 CREATE 语句。
  • 对于表空间:
    1. 将多个小型表空间中的数据移到一个更大的表空间中。
    2. 将原来的小型表空间删除。
    3. 重新发出 CREATE 语句。
  • 对于 Hadoop 表:
    • 如果数据库中定义的数据类型数目超过了限制,请删除先前通过 CREATE TYPE ARRAY 或 CREATE TYPE ROW 创建的某种类型,或者删除具有类型为 ARRAY 或 ROW 的列的 Hadoop 表。

sqlcode:-296

sqlstate:54035

SQL0297N

容器或存储路径的路径名太长。

下列其中一个条件为真:

  • 指定容器名的完整路径超过允许的最大长度(254 个字符)。 如果容器指定为相对于数据库目录的路径,那么这两个值的并置必须不超过最大长度。 有关详细信息,可在管理通知日志中找到。
  • 存储路径超过了允许的最大长度(175 个字符)。
缩短路径长度。

sqlcode:-297

sqlstate:54036

SQL0298N

错误的容器路径。 容器路径违反下列需求之一:

  • 容器路径必须是有效的标准绝对路径或有效的相对路径。 后者解释为相对于数据库目录。
  • 对于 EXTEND、REDUCE、RESIZE 和 DROP 操作,指定容器路径必须存在。
  • 路径对于实例标识必须是可读写的(检查基于 UNIX 的系统上的文件许可权)。
  • 容器的类型必须是命令中指定的类型(目录,文件或者设备)。
  • 系统管理的表空间中的容器(目录)在指定为容器时必须是空的,并且不能嵌套在其他容器以下。
  • 一个数据库的容器不能定位在另一数据库的目录之下,并且不可以在看起来是其他数据库的任何目录之下。 这将任何 SQLnnnnn 格式的目录排除在外,这里“n”是任意的数字。
  • 容器必须在操作系统的文件大小限制以内。
  • 在所有代理程序终止后,已删除的数据库管理的表空间的容器(文件)仅能重新用作系统管理的表空间的容器(目录),反之亦然。
  • 重定向复原期间,对 DMS 表空间指定了 SMS 容器,或对 SMS 表空间指定了 DMS 容器。
  • 用于 EXTEND、REDUCE、RESIZE 或 DROP 操作的容器的指定类型与创建容器时指定的容器(FILE 或 DEVICE)的类型不匹配。

如果发生阻止 DB2 访问容器的任何其他意外错误,那么也将返回此消息。

如果您正在使用集群管理器,那么当数据库管理器无法将数据库容器路径添加到集群管理器配置时,可能会返回此错误。 如果集群管理器无法访问此路径,那么集群管理器将不能成功地管理涉及到此路径的故障转移。 集群管理器中生成的错误消息将记录在 db2diag 日志文件中。

指定另一个容器位置或更改容器以使其可被 DB2 接受(如更改文件许可权),然后再次尝试。

如果您正在使用集群管理器,那么更正问题并重新提交该命令:

  1. 查看 db2diag 日志文件,以获取集群管理器中生成的错误消息。
  2. 对 db2diag 日志文件中的集群管理器错误消息作出响应,以解决导致数据库管理器无法将路径添加到集群管理器配置的底层问题。
  3. 重新提交该命令。

sqlcode:-298

sqlstate:428B2

SQL0299N

容器已经分配给表空间。 欲添加的容器已经分配给表空间。 选择另一个容器,然后再次尝试。

sqlcode:-299

sqlstate:42731

SQL0301N

因为数据类型方面的问题,无法使用输入变量、表达式或编号为 编号 的参数的值。 无法按语句中指定的方式使用变量、表达式或者位置 编号 中的参数,因为其数据类型与它的值的预期用法不兼容。

可能会由于在 EXECUTE 或 OPEN 语句上的 SQLDA 中指定不正确的主机变量,或不正确的 SQLTYPE 值而发生此错误。 如果是用户定义的结构化类型,主机变量或 SQLTYPE 的关联内置类型可能与该语句的变换组中定义的 TO SQL 变换函数的参数不兼容。 在字符和图形数据类型之间执行隐式或显式强制类型转换的情况下,此错误指示以非 Unicode 字符或图形字符串尝试此强制类型转换。

无法处理该语句。

验证语句中所有主机变量的数据类型与使用它们的方式是兼容的。

sqlcode:-301

sqlstate:07006

SQL0302N

EXECUTE 或 OPEN 语句中主机变量的值超出了其相应的使用范围。 发现输入主机变量的值对于其在 SELECT、VALUES 或预编译语句中的使用而言已超出了范围。

发生了下列情况之一:

  • SQL 语句中使用的相应主机变量或参数标记被定义为字符串,但是输入主机变量包含的字符串太长。
  • SQL 语句中使用的相应主机变量或参数标记被定义为数字,但是输入主机变量包含的数值超出了范围。
  • C 语言以 NUL 终止的字符串主机变量中丢失终止字符 NUL。
  • 联合系统用户:在传递会话中,可能违反了特定于数据源的限制。

由于在 EXECUTE 或 OPEN 语句上的 SQLDA 中指定了不正确的主机变量或不正确的 SQLLEN 值,因此发生此错误。

无法处理该语句。

确保输入主机变量值的类型和长度正确。

如果输入主机变量向参数标记提供值,那么使这些值与参数标记的隐含数据类型和长度相匹配。

联合系统用户:对于传递会话,请确定导致该错误的数据源。

检查该数据源的 SQL 方言以确定违反了哪个特定限制,并根据需要来调整失败的语句。

sqlcode:-302

sqlstate:22001, 22003

SQL0303N

不可将值赋给 SELECT、VALUES、FETCH 或赋值语句中的主机变量,因为数据类型不兼容。 嵌入的 SELECT、VALUES、FETCH 或赋值语句赋值给主机变量,但该变量的数据类型与对应的 SELECT 列表、VALUES 列表或赋值语句元素右边不兼容。 对于用户定义的数据类型,用来定义主机变量的关联内置数据类型可能与该语句的变换组中定义的 FROM SQL 变换函数的结果类型不兼容。 例如,如果列的数据类型是日期或时间,那么变量的数据类型必须为有适当最小长度的字符。

无法处理该语句。

验证表定义是否是最新的,且主机变量的数据类型是否正确。 对于用户定义的数据类型,验证主机变量的关联内置类型与该语句的变换组中定义的 FROM SQL 变换函数的结果类型是否兼容。

sqlcode:-303

sqlstate: 42806

SQL0304N

不能赋值给主机变量,因为该值不在主机变量的数据类型的范围之内。 对主机变量列表执行的 FETCH、VALUES、SELECT 或赋值失败,因为主机变量不够大,所以不能容纳检索到的值。

无法处理该语句。 未检索到数据。

验证表定义是否是当前的,并且主机变量是否具有正确的数据类型。 有关 SQL 数据类型的范围,请参阅 SQL Reference

联合系统用户:有关数据源返回的数据类型的范围,请参阅该数据源的文档。

sqlcode:-304

sqlstate:22001, 22003

SQL0305N

因为没有指定指示符变量,所以不能将 NULL 值赋给主机变量。 FETCH、赋值、嵌入式 SELECT 或 VALUES 操作检索到用以插入主机变量的 NULL 值,但未对该主机变量提供指示符变量。 如果列可能返回空值,那么必须提供指示符变量。

无法处理该语句。 未检索到数据。

请检查 FETCH 或 SELECT 对象表的定义、VALUES 列表的元素或者赋值语句的右边。 更正程序,以便为所有可能从其列中检索到 NULL 值的主机变量提供指示符变量。

sqlcode:-305

sqlstate:22002

SQL0306N

主机变量 名称 未定义。 主机变量 名称 未在任何 DECLARE SECTION 中声明。

无法处理该语句。

确保声明了主机变量且名称拼写正确。

SQL0307N

主机变量 名称 已定义。 主机变量 名称 已在 DECLARE SECTION 中声明。

忽略该定义。 使用先前的定义。

确保正确拼写主机变量名,且对于每一个程序该名称仅定义一次。

SQL0308N

主机变量数的限制已达到。 主机变量数的限制取决于多少主机变量适合于 SYSPLAN 的 HOST_VARS 列。 已达到此限制。

忽略剩余的变量声明。

简化程序,将程序分成更小的单独程序,或者两者都进行。

SQL0309N

OPEN 语句中的主机变量的值为 NULL,但其相应的使用不可为 NULL。 发现输入主机变量的值为 NULL,但是在 SELECT、VALUES 或预编译语句中的相应使用未指定指示符变量。

无法处理该语句。

确保需要 USING 子句。 否则,确保仅当必要时才指定指示符变量。

sqlcode:-309

sqlstate:07002

SQL0310N

SQL 语句包含太多的主机变量。 在语句中超过了主机变量的最大数目。

无法处理该语句。

确保该语句带有更少的主机变量或者不太复杂。

SQL0311N

字符串主机变量号 变量号 的长度为负数或者大于最大值。 求值时,字符串主变量的长度规范(其 SQLDA 中的条目由 <var-number>(基于 1)表示)为负或大于为该主变量定义的最大值。

无法处理该语句。

更正程序以确保所有字符串主机变量的长度都不是负数,或它们不大于允许的最大长度。

sqlcode:-311

sqlstate:22501

SQL0312N

未处理该语句,因为未定义以下主机变量或以不受支持的方式使用了以下主机变量:变量名 以下列无效方式使用主机变量时,可能会返回此消息:

  • 在动态 SQL 语句或 DDL 语句中使用了主机变量 变量名
  • 在不允许结构引用的位置使用了实际上是结构的主机变量 变量名
执行下列其中一个步骤,然后再次执行该语句:

  • 在动态 SQL 语句中,使用参数标记代替主机变量。
  • 在 DDL 语句中,移除对主机变量的引用。
  • 将结构引用替换为并非结构的主机变量。
  • 从所有基于表达式的索引定义中的表达式键中移除主机变量。
  • 如果已声明多个结构数组,请保留其中一个声明并移除其他所有声明。

sqlcode:-312

sqlstate:42618

SQL0313N

EXECUTE 语句中的变量数、OPEN 语句中的变量数或者参数化游标的 OPEN 语句中的自变量数与所需值的数目不同。 EXECUTE 或 OPEN 语句中指定的变量数与 SQL 语句中出现的参数标记所需变量的数目不同。

如果引用了参数化游标,那么游标自变量的数目与所需数目不同。

更正应用程序,以使 EXECUTE 或 OPEN 语句中指定的变量数对于 SQL 语句中的参数标记而言正确。

更正参数化游标引用,以便指定数目正确的自变量。

sqlcode:-313

sqlstate:07001, 07004

SQL0314N

不正确地声明了主机变量 名称 因为下列其中一种原因,未正确地声明主机变量 名称

  • 指定的类型不是受支持的类型。
  • 长度规范是 0、负数或太大。
  • 使用了初始化程序。
  • 指定了不正确的语法。
  • 指定了基数大于最大允许值的主机变量数组。

变量仍未定义。

确保仅正确地指定了数据库管理器支持的声明。

SQL0315N

未正确地声明主机变量。

因为下列其中一种原因,未正确地声明主机变量:

  • 指定的类型不是受支持的类型。
  • 长度规范是 0、负数或太大。
  • 指定了不正确的语法。

变量仍未定义。

确保仅正确地指定了数据库管理器支持的声明。

SQL0317N

在 BEGIN DECLARE SECTION 之后未找到 END DELCARE SECTION。 在处理 DECLAR SECTION 期间到达输入末尾。

预编译终止。

添加 END DECLARE SECTION 语句以结束 DECLARE SECTION。

SQL0318N

找到 END DECLARE SECTION,但没有前面的 BEGIN DECLARE SECTION。 找到 END DECLARE SECTION 语句,但没有前面的 BEGIN DECLARE SECTION。

无法处理该语句。

在 END DECLARE SECTION 前面输入 BEGIN DECLARE SECTION。

SQL0324N

用法 变量名 名称 的类型错误。 INDICATOR 变量 名称 不是小整数,或者 STATEMENT 变量 名称 不是字符数据类型。

无法处理该语句。

确保变量是正确的类型且指定正确。

SQL0327N

无法将行插入表 表名 中,因为它在定义的数据分区范围之外。 如果执行的操作是插入或更新,那么该行的表分区键的值不在任何已定义的数据分区的值范围内。

如果执行的操作是将表改变为分区表,那么该表中存在满足以下条件的一行或多行:其表分区键值不在任何已定义的数据分区的值范围内。

无法处理该语句。

对于插入或更新操作,请确保表分区键列在该表的数据分区的指定范围内。

可能需要将其他数据分区添加到该表。

如果将表改变为分区表,请确保指定必需的范围,以允许该表中的所有数据都在数据分区的范围内。

sqlcode:-327

sqlstate:22525

SQL0329N

路径名列表 字符串常量或主机变量 无效。 字符串常量或输入主机变量 字符串常量或主机变量 包含无效的路径名列表。 已超过用于 SQL 路径(FUNCPATH 绑定选项或 CURRENT PATH 专用寄存器)或程序包路径(CURRENT PACKAGE PATH 专用寄存器)的最大模式名数目。 请参阅 SQL Reference 的“Limits”附录以了解有关此限制的详细信息。

不能处理语句或命令。

请指定较少的模式名以便不超出该限制。 考虑将用户定义的函数、过程、方法、单值类型或程序包合并为较少的模式。

sqlcode:-329

sqlstate:0E000

SQL0330N

不能使用字符串,因为无法对其进行处理。 原因码=Reason-code。 代码点 = 代码点。 主机变量位置是 主机变量位置

不能处理字符串,因为在将字符串转换为另一个编码字符集时发生了转换错误。 原因码 指示了错误类型:

8
长度异常(例如,PC MIXED 数据需要的扩充超过了字符串的最大长度)。
12
代码点无效(例如,使用 SYSSTRINGS 的 ERRORBYTE 选项)。
16
格式异常(例如,无效 MIXED 数据)。
20
转换过程错误(例如,z/OS 服务器上的一个出口将字符串的长度控制字段设置为无效值)。
24
在 wchar_t 主机变量所包含的字符串中找到了单字节字符。

如果 原因码 为 12,那么 代码点 是一个无效代码点。 否则,代码点 为空白或者是由出口返回的附加原因码。 如果字符串是输入主机变量的值,那么位置编号是 SQLDA 中的变量的序数。 如果字符串不是主机变量的值,那么位置编号为空白。

无法处理该语句。

根据原因码执行下列其中一项操作:

8
扩展主机变量的最大长度,以允许在转换字符串时进行扩展。
12
更改转换表以接受代码点,或者更改数据以消除代码点。
16
如果字符串被描述为 MIXED 数据,那么将它的描述或字符串更改为符合格式良好的混合数据的规则。
20
更正转换过程。
24
从图形字符串中删除单字节字符。

sqlcode:-330

sqlstate:22021

SQL0332N

不支持从源代码页 源代码页 到目标代码页 目标代码页 的字符转换。 操作失败,因为 源代码页 与 目标代码页 之间不存在代码页转换。 这可能是由下列其中一个原因引起的:

  1. 源代码页与目标代码页的字符指令表不兼容,因此,当源代码页与目标代码页之间进行转换时,这可能会导致字符丢失和破坏。
  2. 不支持此特定代码页转换。

可能会导致此错误的某些操作包括:

  • 将客户机连接至数据库,而客户机的代码页与数据库代码页不相同。
  • 执行 SQL 语句,客户机的代码页与数据库代码页不相同。
  • 导入或导出 IXF 文件,而该文件的代码页与数据库代码页不相同。
  • 联合系统用户:数据源不支持指定的代码页转换。
  1. 使源代码页与目标代码页互相兼容。 要将客户机的代码页设置为与数据库代码页兼容:
    • 在 Unix 平台上,将 LANG、LC_CTYPE 或 LC_ALL 环境变量设置为这样一种语言环境:其代码页与数据库代码页相兼容。 请查阅平台文档,以了解有效的语言环境名称以及与每个语言环境名称相关联的代码页。
    • 在 Windows 平台上,设置 DB2CODEPAGE 注册表变量,以使用一个与数据库代码页兼容的值来覆盖客户机的代码页。
  2. 如果源代码页与目标代码页兼容,那么说明 DB2 当前不支持此特定的代码页转换。 请与技术服务代表联系以确定是否可以添加这种支持。

DB2 UDB iSeries 版的用户应该知道:具有 CCSID 65535 的字符列或图形列是不受支持的。 必须将使用 CCSID 65535 的字符列或图形列转换为受支持的 CCSID(使用 CAST 来进行转换)之后,才能使用 DB2 Connect 来访问这些列。

sqlcode:-332

sqlstate:57017

SQL0334N

当执行从代码页  到代码页 目标 的转换时发生溢出。 目标区域的最大大小为 最大长度。 源字符串的长度为 源长度,且它的十六进制表示为 字符串 在执行 SQL 语句期间,代码页转换操作产生的字符串比目标对象的最大大小还长。 根据不同的情况,采用下列方法修改数据,以避免发生溢出情况:

  • 减短源字符串的长度,或者增大目标对象的大小(请参阅此列表后面的注释),
  • 改变操作,
  • 在解密功能中使用已加密的数据值之前,将已加密的数据值强制类型转换为具有更多字节数的 VARCHAR 字符串,或者
  • 确保应用程序代码页与数据库代码页相同。 这样,大多数连接就不需要代码页转换。

注意:将不会在字符转换过程中自动提升字符或图形字符串数据类型。 如果结果字符串长度超过源字符串的数据类型的最大长度,那么溢出已发生。 欲更正这种情况,可更改源字符串的数据类型,或者使用数据类型强制类型转换以允许由于转换而造成的字符串长度的增大。

sqlcode:-334

sqlstate:22524

SQL0336N

十进制数的小数位必须为零。 十进制数用在小数位必须为零的上下文中。 当在 CREATE 或 ALTER SEQUENCE 语句中为 START WITH、INCREMENT、MINVALUE、MAXVALUE 或 RESTART WITH 指定了十进制数时,就会发生这种情况。

无法处理该语句。

更改该十进制数(从十进制定界符右边移除任何非零数位)。

sqlcode:-336

sqlstate:428FA

SQL0338N

与 JOIN 运算符相关联的 ON 子句或 MERGE 语句中的 ON 子句无效。

由于下列原因之一,与 JOIN 运算符相关联的 ON 子句或 MERGE 语句中的 ON 子句无效。

  • ON 子句中的列引用一定只能引用位于 ON 子句的作用域中的表的列。
  • 在全部外连接的 ON 子句中引用的函数必须是确定的,并且没有外部操作。
  • 无法使用取消引用操作 (->)。
  • MERGE 语句的 ON 子句不能包含子查询。
  • MERGE 语句的 ON 子句不能包含标量全查询。
  • MERGE 语句的 ON 子句不能包含内联 SQL 函数或内联 SQL 方法。

无法处理该语句。

更正 ON 子句以引用相应的列,或移除所有取消引用运算符。

如果正在使用全部外连接,那么确保 ON 子句中的所有函数都是确定的,且没有外部操作。

对于 MERGE 语句的 ON 子句,移除所有子查询、标量全查询、内联 SQL 函数或内联 SQL 方法。

sqlcode:-338

sqlstate:42972

SQL0340N

公共表表达式 名称 与同一语句中出现的另一个公共表表达式定义有相同标识。 公共表表达式名 名称 用在语句中多个公共表表达式的定义中。 用于描述公共表表达式的名称在同一语句内必须是唯一的。

无法处理该语句。

更改其中一个公共表表达式的名称。

sqlcode:-340

sqlstate:42726

SQL0341N

循环引用存在于公共表表达式 名称-1 和 名称-2之间。 公共表表达式 名称-1 引用其全查询中 FROM 子句中的 名称-2,而 名称-2 引用其全查询中 FROM 子句中的 名称-1。 不允许这种形式的循环引用。

无法处理该语句。

从其中一个公共表表达式中移除循环引用。

sqlcode:-341

sqlstate:42835

SQL0342N

公共表表达式 名称 不能使用 SELECT DISTINCT,必须使用 UNION ALL,因为它是递归的。

有两种可能的解释:

  • 公共表表达式 名称 内的全查询不能以 SELECT DISTINCT 开始,原因是该公共表表达式是递归的。
  • 公共表表达式 名称 内的全查询指定了 UNION,而非递归公共表表达式所必需的 UNION ALL。

无法处理该语句。

从公共表表达式中移除关键字 DISTINCT,在 UNION 后面添加关键字 ALL,或移除公共表表达式中的递归引用。

sqlcode:-342

sqlstate:42925

SQL0343N

列名是递归公共表表达式 名称 所必需的。 递归公共表表达式 名称 必须在公共表表达式的标识后面包括列名的规范。

无法处理该语句。

在公共表表达式标识后面添加列名。

sqlcode:-343

sqlstate:42908

SQL0344N

递归公共表表达式 名称 有一列 列名 具有不匹配的数据类型、长度或代码页。 递归公共表表达式 名称 有一列 列名,在公共表表达式的迭代全查询中引用了该列。 数据类型、长度和代码页是根据对此列的初始化全查询而设置的。 迭代全查询中的列 列名 的表达式的结果具有不同的数据类型、长度或代码页,这可能导致对列赋值失败。

无法处理该语句。

更正在递归公共表表达式的全查询中使用的列,使初始化列与选代列相匹配。

sqlcode:-344

sqlstate:42825

SQL0345N

递归公共表表达式的全查询 名称 必须是两个或多个全查询的 UNION,并且不能包括列函数、GROUP BY 子句、HAVING 子句、ORDER BY 子句或包括 ON 子句的显式连接。

公共表表达式 名称 包括对其自身的引用,因此:

  • 必须是两个或更多全查询的并集
  • 不能包括 GROUP BY 子句
  • 不能有列函数
  • 不能包括 HAVING 子句
  • 在迭代全查询上不能包括 ORDER BY 子句
  • 不能包括带有 ON 子句的显式连接。

无法处理该语句。

通过以下操作更改公共表表达式:

  • 使之成为两个或更多全查询的并集
  • 移除任何列函数、GROUP BY 子句、HAVING 子句、ORDER BY 子句或包括 ON 子句的显式 JOIN。
  • 移除递归引用。

sqlcode:-345

sqlstate:42836

SQL0346N

对公共表表达式 名称 的无效引用发生在第一个全查询中,该引用在同一条 FROM 子句中第二次出现,或出现在子查询中的 FROM 子句中。

公共表表达式 名称 包括对其自身的无效引用,如下列其中一项所述。

  • 在第一个全查询中 UNION ALL 集合运算符之前的递归引用。 第一个全查询必须为初始化,且不能包括递归引用。
  • 在同一个 FROM 子句中对同一个公共表表达式有多个引用。 在递归公共表表达式中不允许这样的引用。
  • 子查询的 FROM 子句中的递归引用。 不能使用子查询定义递归周期。

无法处理该语句。

更改下列其中一项:

  • 在 union 运算符之前的全查询,使它不包括递归引用
  • 包含对同一个公共表表达式的多个引用的 FROM 子句,使它只有一个引用
  • 子查询的 FROM 子句,使它不引用公共表表达式。

sqlcode:-346

sqlstate:42836

SQL0347W

递归公共表表达式 名称 可能包含无限循环。

称为 名称 的递归公共表表达式可能未完成。 发出此警告是因为未找到作为递归公共表表达式迭代部分的一部分的特定语法。 期望的语法包括:

  • 将迭代选择列表中的 INTEGER 列加 1。
  • 迭代部分的 where 子句中的谓词,格式为“counter_col < constant”或“counter_col < :hostvar”。

在递归公共表表达式中缺少此语法可能导致一个无限循环。 无论如何,递归公共表表达式的数据或某些其他特征可能允许该语句成功地完成。

要防止无限循环,如所述的那样包括期望的语法。

sqlcode:+347

sqlstate:01605

SQL0348N

不能在此上下文中指定 序列表达式

该语句在无效上下文中包含了 NEXT VALUE 表达式或 PREVIOUS VALUE 表达式。 不能在下列上下文中指定 NEXT VALUE 表达式和 PREVIOUS VALUE 表达式:

  • 全部外连接的连接条件
  • CREATE TABLE 或 ALTER TABLE 语句中某列的 DEFAULT 值
  • 在 CREATE TABLE 或 ALTER TABLE 语句中生成的列定义
  • CHECK 约束的条件
  • CREATE TRIGGER 语句(可指定 NEXT VALUE 表达式,但不能指定 PREVIOUS VALUE 表达式)
  • CREATE VIEW 语句、CREATE METHOD 语句或 CREATE FUNCTION 语句

不能在下列上下文中指定 NEXT VALUE 表达式:

  • CASE 表达式
  • 聚集函数的自变量列表
  • INSERT、UPDATE 或 VALUES INTO 语句的全查询中的子查询以外的子查询
  • 外层 SELECT 为其包含了 DISTINCT 运算符的 SELECT 语句
  • 外层 SELECT 为其包含了 GROUP BY 子句的 SELECT 语句
  • 连接的连接条件
  • SELECT 语句,外层 SELECT 为该语句而与另一使用 UNION、INTERSECT 或 EXCEPT 集合运算符的 SELECT 语句组合在一起
  • 嵌套表表达式
  • 表函数的自变量列表
  • XMLTABLE、XMLQUERY 或 XMLEXISTS 表达式的自变量列表
  • 最外层的 SELECT 语句、DELETE 或 UPDATE 语句的 WHERE 子句
  • 最外层的 SELECT 语句的 ORDER BY 子句
  • 表达式的全查询的 select 子句(在 UPDATE 语句的 SET 子句中)
  • IF, WHILE, DO…SQL 例程中的 UNTIL 或 CASE 语句
  • CONNECT_BY_ROOT 运算符和 SYS_CONNECT_BY_PATH 函数的自变量列表
  • START WITH 和 CONNECT BY 子句

无法执行该语句。

移除对序列表达式的引用,并重新提交该语句。

sqlcode:-348

sqlstate:428F9

SQL0349N

位置 列位置 处列的 NEXT VALUE 表达式的规范必须与所有行同一列的所有其他表达式的规范相匹配。

VALUES 表达式或是针对多行 INSERT 语句的 VALUES 子句中位置 列位置 处的列指定的表达式,包含有一个 NEXT VALUE 表达式。 当使用包含 NEXT VALUE 表达式的表达式在这些上下文之一中指定某列的值时,必须为所有行的该列指定相同的表达式。 例如,下列 INSERT 语句将成功:

INSERT INTO T1
  VALUES(
    NEXT VALUE FOR sequence1 + 5, 'a'
    ),
    (
    NEXT VALUE FOR sequence1 + 5, 'b'
    ),
    (
    NEXT VALUE FOR sequence1 + 5, 'c'
    )

但是,下列 INSERT 语句将失败:

INSERT INTO T1
  VALUES(
    NEXT VALUE FOR sequence1 + 5, 'a'
    ),
    (
    NEXT VALUE FOR sequence1 + 5, 'b'
    ),
    (
    NEXT VALUE FOR sequence1 + 4, 'c'
    )
更正语法并重新提交该语句。

sqlcode:-349

sqlstate:560B7

SQL0350N

在列数据类型不受支持的上下文中隐式或显式引用了 列名 列。 下列其中一项原因导致 ALTER 语句、CREATE 语句或 DECLARE GLOBAL TEMPORARY TABLE 语句无效:

  • 不能在键中使用 LOB、LONG VARCHAR、LONG VARGRAPHIC、XML 或结构化类型列。
  • 不能在唯一约束中使用 LOB、LONG VARCHAR、LONG VARGRAPHIC、XML 或结构化类型列。
  • 不能在生成列中使用 LOB、LONG VARCHAR、LONG VARGRAPHIC、XML 或结构化类型列。
  • 不能在已创建的临时表中使用 LONG VARCHAR、LONG VARGRAPHIC、SYSPROC.DB2SECURITYLABEL、XML 或结构化类型列。
  • 不能在已声明的临时表中使用 LONG VARCHAR、LONG VARGRAPHIC、SYSPROC.DB2SECURITYLABEL、单值类型或结构化类型列。
  • 不能在索引定义中使用 LOB 列。
  • 如果 XML 列是唯一的列并且指定了 XMLPATTERN 子句,那么该 XML 列只能用于索引定义。
  • 如果结构化类型列是唯一的列并且指定了相关联的索引扩展,那么该结构化类型列只能用于索引定义。
  • 列掩码或行许可权的定义不能引用 LOB 或 XML 列。
  • 无法为 LOB 或 XML 列定义列掩码。
  • 在 Hadoop 表中:
    • 不能在唯一定义中使用类型为数组的列。
    • 不能在唯一定义中使用类型为行的列。
    • 不能在主键定义中使用类型为数组的列。
    • 不能在主键定义中使用类型为行的列。
    • 不能在索引定义中使用类型为数组的列。
    • 不能在索引定义中使用类型为行的列。
    • 第一列的数据类型不能为数组或行。

对于其基本数据类型要受到前面列示的其中一项限制的单值类型列,该限制同样适用。

无法处理该语句。

从其数据类型不受支持的上下文中除去此列,或者更改此列的数据类型。 如果要对 XML 列或结构化类型列建立索引,那么应确保它是唯一的列并且索引定义中包括适当的子句。

sqlcode:-350

sqlstate:42962

SQL0351N

在输出 SQLDA(选择列表)的位置 位置编号 中遇到不支持的 SQLTYPE。 位置 位置编号 处的 SQLDA 的元素用于不受应用程序请求器或应用程序服务器支持的数据类型。 如果应用程序不直接使用 SQLDA,那么 位置编号 可能表示选择列表中的元素或 CALL 语句参数的位置。

无法处理该语句。

更改该语句,排除不支持的数据类型。 对于 SELECT 语句,移除选择列表中任何具有不受支持数据类型的列的名称,或在查询中使用强制类型转换来将列强制类型转换为受支持的数据类型。

sqlcode:-351

sqlstate:56084

SQL0352N

在输入列表(SQLDA)的位置 位置编号 中遇到不受支持的 SQLTYPE。 位置 位置编号 处的 SQLDA 的元素用于不受应用程序请求器或应用程序服务器支持的数据类型。 如果应用程序未直接使用 SQLDA,那么 位置编号 可能表示输入主机变量、参数标记或 CALL 语句参数的位置。

无法处理该语句。

更改该语句,排除不支持的数据类型。

sqlcode:-352

sqlstate:56084

SQL0355N

定义的列 列名 太大而不能记录。 大对象数据类型(BLOB、CLOB 和 DBCLOB)最多可创建为 2 千兆字节的大小(2147483647 字节)。 只允许对大小小于或等于 1 千兆字节(1073741823 字节)的对象记录数据值。 因此,不能记录大于 1 千兆字节的大对象。 通过在列创建期间使用 NOT LOGGED 短语显式地指示不需要记录数据,或者减小列的最大大小至 1 千兆字节或以下。

sqlcode:-355

sqlstate:42993

SQL0356N

由于键表达式无效,因此未创建索引。 键表达式:表达式编号。 原因码:原因码 您可以创建包含基于表达式的键的表索引。 在尝试创建包含基于表达式的键的索引,并且符合下列其中一个条件时,将返回此消息:

  • 其中一个基于表达式的键定义的某些内容无效
  • 此表不支持基于表达式的键

运行时标记 表达式编号 标识了语句中无效的键表达式。 例如,如果 CREATE INDEX 语句中包含两个键表达式,并且第二个键表达式无效,那么 表达式编号 的值将是:“2”。 如果无法确定表达式编号,那么将返回缺省值“*”。

原因码指示了键表达式无效的原因:

1
键表达式包含子查询。
2
键表达式未包含对至少一个列的引用。
3
键表达式引用了专用寄存器,或者键表达式引用了依赖于专用寄存器值的函数。
5
键表达式包含用户定义的函数。
6
同一个键表达式在索引定义中多次出现。
15
键表达式引用了全局变量,或者键表达式引用了依赖于全局变量值的函数。
16
键表达式引用了序列。
17
键表达式引用了类型不受支持的函数:

  • 非确定性函数
  • 具有外部操作的函数
  • 访问级别不受支持的函数:
    • READ SQL DATA
    • MODIFIES SQL DATA
18
键表达式包含数据类型不受支持的值。
19
键表达式包含聚集函数或 OLAP 规范。
20
索引定义包含 SCOPE 子句,并且键表达式包含下列其中一项内容:

  • 取消引用操作
  • TYPE 谓词
  • CAST 规范
21
键表达式包含 XMLQUERY 表达式或 XMLEXISTS 表达式。
22
尝试对不支持基于表达式的索引的表创建基于表达式的索引。
23
键表达式引用了类型不受支持的函数,例如 LIKE 谓词。
24
基于表达式的键的结果数据类型不支持索引。
请更正键表达式中的错误,然后重新发出该语句。

sqlcode:-356

sqlstate:429BX

SQL0359N

标识列或者序列的值范围用完。 数据库管理器尝试为标识列或序列对象生成一个值,但允许的所有值都已分配。

无法处理该语句。

对于标识列,用标识列的更大范围的值来重新定义该表。 如果已经执行了将值范围限制为小于该列的数据类型范围的 MAXVALUE 或 MINVALUE 规范,那么可以改变该列以便扩展有效值的范围。 否则,必须重新创建标识列,而它又要求重新创建表。 首先删除现有的表,然后用标识列的另一数据类型重新创建该表,指定比标识列的当前数据类型具有更大值范围的数据类型。

对于序列对象,以更大的值范围重新定义序列。 如果 MAXVALUE 或 MINVALUE 子句将值的范围限制为小于序列对象的数据类型的范围,那么可以改变该序列以便扩展有效值的范围。 否则,删除该序列对象,再重新发出 CREATE SEQUENCE 语句,它指定了允许更大值范围的数据类型。

sqlcode: -359

sqlstate:23522

SQL0360W

因为表 表名 处于“Datalink 协调暂挂”(DRP)或“Datalink 协调不可能”(DRNP)状态,所以 DATALINK 值可能无效。 因为表 表名 处于“Datalink 协调暂挂”(DRP)或 “Datalink 协调不可能”(DRNP)状态,所以该表中的 DATALINK 值可能无效。 当处于这些状态之一时,将不能保证对 DB2 Data Links Manager 上的文件的控制。

语句处理继续。

请参阅《管理指南》中有关“Datalink 协调暂挂”(DRP) 和“Datalink 协调不可能”(DRNP) 状态的信息,以执行适当的操作。

sqlcode:+360

sqlstate:01627

SQL0361W

操作成功,但是该操作的某些部分不成功。 标记 消息标记-1 和 消息标记-2 提供了有关操作 消息标记-3 的更多详细信息。 操作成功,成功地完成了所指定的操作的某些部分,但是此操作的某些部分不成功。 根据操作 消息标记-3 来确定要执行的操作:SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS – 无法成功地重新验证某些指定为要重新验证的对象,因为它们引用的对象中至少有一个不存在或者仍然无效。 未重新验证的一个对象是 消息标记-1,因为它引用了 消息标记-2 对象。 如果仍然需要重新验证尚未重新验证的对象,请创建应存在的所有对象,并更正要重新验证的对象所引用的仍然无效的所有对象。 SYSCAT.INVALIDOBJECTS 目录视图中包含有关这些无效对象的信息。 如果 消息标记-1 是指一个许可权或掩码对象,而 消息标记-2 包含 CREATE PERMISSION 或 CREATE MASK,请确保运行 ADMIN_REVALIDATE_DB_OBJECTS 的用户具有 SECADM 权限。

sqlcode:+361

sqlstate:0168B

SQL0364W

在 operation 操作期间发生了 DECFLOAT 异常 exception-type 。 在对数据类型为 DECFLOAT 的字段执行 运算类型 运算时,发生了异常 异常类型。 在处理算术表达式时发生了该异常。

异常类型 的可能值包括:

  • 对于下溢异常,为 UNDERFLOW
  • 对于溢出异常,为 OVERFLOW
  • 对于不精确的异常,为 INEXACT
  • 对于无效的运算异常,为 INVALID OPERATION
  • 对于除零异常,为 DIVISION BY ZERO

运算类型 的可能值包括:

  • 对于加法运算,为 ADDITION
  • 对于减法运算,为 SUBTRACTION
  • 对于乘法运算,为 MULTIPLICATION
  • 对于除法运算,为 DIVISION
  • 对于取负运算,为 NEGATION
  • 对于内置函数运算,为 BUILT-IN FUNCTION

可能是由于已对此运算转换为 DECFLOAT 的数据的临时内部副本,而发生了 DECFLOAT 异常。

在对内置函数执行处理期间,可能会发生其中的任一异常。 如果 运算类型 是 FUNCTION,那么在处理输入值、中间值或最终值时发生了异常。 原因可能是参数的值超出了范围。

语句处理继续。

要阻止返回此警告,请检查对其发出警告的表达式,以查看是否可以确定异常的原因或可能原因。 异常可能与数据相关,在这种情况下,将必须检查发生警告时正在处理的数据。 请参阅 SQL Reference 以获取受支持的 DECFLOAT 值范围。

sqlcode:+364

sqlstate:0168C

sqlstate:0168D

sqlstate:0168E

sqlstate:0168F

SQL0365N

未处理该语句,因为位于位置 位置 的扩展指示符变量的值无效。 可以通过将指示符变量与主机变量配合使用在应用程序中表示 SQL 空值。 还可以通过将扩展指示符与主机变量配合使用来表示缺省值或未指定的值。

以下是有关扩展指示符的用法及使用位置的一些限制。 例如,缺省值 (-5) 或未指定的值 (-7) 不得用于 VALUES 子句(可指定多行值)中的扩展指示符变量。

当缺省值 (-5) 或未指定的值 (-7) 用在不允许使用这些值的上下文中时,会返回此消息。

运行时标记 位置 中的诊断信息:

  • 通常,运行时标记 位置 所提供的位置是使用扩展指示符的主机变量的序数。
  • 如果 position 为 0,那么扩展指示符支持中会出现不匹配。 未对动态预编译的 UPDATE 语句显示启用或禁用扩展指示符支持,并且在对动态预编译的 SELECT 语句(更新的目标)显示启用或禁用的扩展指示符支持与绑定或预编译的扩展指示符支持之间存在不匹配。
将扩展指示符变量的值更改为对上下文可允许的值,在该上下文中将使用该值。

如果 位置 为 0,请通过下列其中一种方式作出响应:

  • 显式启用或禁用对动态预编译的 UPDATE 语句的扩展指示符支持。
  • 确保对动态预编译的 SELECT 语句(更新的目标)指定的扩展指示符支持与绑定或预编译的扩展指示符支持相同。

sqlcode:-365

sqlstate:22539

SQL0368N

未向数据库注册 DB2 Data Links Manager dlm-名称 未向数据库注册 DB2 Data Links Manager dlm-名称。 如果数据库管理器配置参数 DATALINKS 设置为 NO,那么将忽略已注册的 Db2 Data Links Manager。 可能已使用 DROP DATALINKS MANAGER 命令删除了 DB2 Data Links Manager。 可能当前已注册了同名的 DB2 Data Links Manager 的新的替代者; 在这种情况下,错误与先前删除的该 DB2 Data Links Manager 的一个或多个替代者有关。

无法处理该语句。

确保数据库管理器配置参数 DATALINKS 设置为 YES。 应该使用 Reconcile 实用程序来移除与先前删除的 DB2 Data Links Manager 相链接的 DATALINK 值。 有关更多详细信息,请参阅命令参考中 DROP DATALINKS MANAGER 命令的用法说明。

sqlcode:-368

sqlstate:55022

SQL0370N

位置 n 中的参数必须在 LANGUAGE SQL 函数 名称 的 CREATE FUNCTION 语句中命名。 用 LANGUAGE SQL 定义的函数的每个参数都必须要有参数名

无法处理该语句。

包括该函数的每个参数的参数名。

sqlcode:-370

sqlstate:42601

SQL0372N

对于 ROWID 列、标识列、安全标号列、“行更改时间戳记”列、“行开始”列、“行结束”列或“事务开始标识”列这些列类型,对于一个表只能指定一次。 尝试执行下列操作之一:

  • 创建具有多个 IDENTITY 列的表。
  • 向已经具有 IDENTITY 列的表中添加 IDENTITY 列。
  • 创建具有多个 ROWID 列的表。
  • 向已经具有 ROWID 列的表中添加 ROWID 列。
  • 创建具有多个安全标号列的表。
  • 将安全标号列添加至已经具有一个安全标号列的表。
  • 创建具有多个“行更改时间戳记”列的表。
  • 将“行更改时间戳记”列添加至已经具有一个“行更改时间戳记”列的表。
  • 创建具有多个“行开始”列的表。
  • 向已经具有“行开始”列的表添加“行开始”列。
  • 创建具有多个“行结束”列的表。
  • 向已经具有“行结束”列的表添加“行结束”列。
  • 创建具有多个“事务开始标识”列的表。
  • 向已经具有“事务开始标识”列的表添加“事务开始标识”列。
  • 在表中多次定义某个时间段。

DB2 for z/OS 和 DB2 for iSeries 支持 ROWID 数据类型。

无法处理该语句。

对于 CREATE TABLE 语句,仅对表指定一次所指定的属性。 对于 ALTER TABLE 语句,表中已存在所指定的列。 请不要尝试在表中多次定义某个时间段。

sqlcode:-372

sqlstate:428C1

SQL0373N

不能对列或 SQL 变量 名称 指定 DEFAULT 子句。 定义或更改列或 SQL 变量 名称 时指定了 DEFAULT 子句。 但是,列定义或者 SQL 变量声明的数据类型不支持 DEFAULT。 定义下列对象时,CREATE 或 ALTER TABLE 语句不能使用 DEFAULT 子句。

  • 标识列
  • ROWID 列
  • XML 列
  • “行更改时间戳记”列
  • 安全标号列
  • “行开始”列
  • “行结束”列
  • “事务开始标识”列
  • 使用随机依据生成方法的随机分发表的随机分发键列

无法处理该语句。

移除 DEFAULT 子句,并重新提交该语句。

sqlcode:-373

sqlstate:42623

SQL0374N

在 LANGUAGE SQL 函数 function-name 的 CREATE FUNCTION 语句中没有指定 clause 子句,但检查函数体后发现应该指定该子句。 以下情况可能是此错误的原因。

如果用 LANGUAGE SQL 定义的函数体可以修改 SQL 数据,或者它调用可以修改 SQL 数据的函数或过程,那么必须指定 MODIFIES SQL DATA。

如果用 LANGUAGE SQL 定义的函数体包含子查询,或者它调用可以读取 sql 数据的函数,那么必须指定 READS SQL DATA。

无法处理该语句。

指定子句或更改函数体。

sqlcode:-374

sqlstate:428C2

SQL0385W

对 SQL 例程中 SQLSTATE 或 SQLCODE 变量的赋值可能会被覆盖,不会激活任何处理程序。 SQL 例程至少包括一个向 SQLSTATE 或 SQLCODE 特殊变量赋值的语句。 这些变量是通过处理 SQL 例程中的 SQL 语句来赋值的。 因此,所赋的值可能会因 SQL 语句处理而被覆盖。 另外,向 SQLSTATE 特殊变量赋值时不激活任何处理程序。

成功处理了例程定义。

不需要执行任何操作。 移除对 SQLSTATE 或 SQLCODE 特殊变量的任何赋值以防止发生警告。

sqlcode:+385

sqlstate:01643

SQL0388N

在函数 函数名 中的 CREATE CAST 语句中,源 源数据类型名 和目标 目标数据类型名 都是内置类型,或它们都是同一类型。 其中一种数据类型必须是用户定义的类型。 源类型和目标类型不能是相同的数据类型。

无法处理该语句。

更改源或目标的数据类型。

sqlcode:-388

sqlstate:428DF

SQL0389N

在 CREATE CAST 语句中标识的特定函数实例 特定名称 具有多个参数、具有与源数据类型不匹配的参数,或返回与目标不匹配的数据类型。

强制类型转换函数必须

  • 有且仅有一个参数。
  • 该参数的数据类型必须与源数据类型相同,
  • 结果数据类型必须与目标数据类型相同。

无法处理该语句。

选择不同的函数实例,更改源数据类型,或更改目标数据类型。

sqlcode:-389

sqlstate:428DG

SQL0390N

未处理语句,因为函数 函数名 已解析为特定函数 特定名称,此函数在使用它的上下文中无效。 如果运行时标记 特定名称 是空字符串,那么该函数解析为由运行时标记 函数名 标识的内置函数。

可能会在许多情况下返回此消息。 下面简要列示了一些可能会返回此消息的情况:

  • 此特定函数是标量函数、列函数或行函数,而此位置只需要表函数(例如,在查询的 FROM 子句中)。
  • 指定的函数具有 OUT 或 INOUT 参数,在其中使用此函数的上下文不受支持。 仅当函数调用是复合 SQL(编译型)语句中 SET 变量语句右侧的唯一表达式时,才能调用编译型函数。
  • 所指定的函数不是一般表函数,但是指定了 typed-correlation 子句。
通过执行下列其中一个或多个故障诊断步骤,对此错误作出响应:

  • 确认函数名和自变量是否正确。
  • 确认当前路径是否包括用于定义正确函数的模式。
  • 更改使用该函数的上下文。

sqlcode:-390

sqlstate:42887

SQL0391N

使用基于行的函数 函数名 无效。

该语句使用基于行的函数 函数名,由于下列其中一种原因而不能使用该函数:

  • 在 GROUP BY 或 HAVING 子句中使用该函数,但未同时将该函数包括在选择列表中。
  • 因为该语句的递归性质,所以不能在此上下文中使用该函数。
  • 不能在检查约束中使用该函数。
  • 不能在生成的列中使用该函数。
  • 不能在下列视图定义或视图中使用该函数:指定了 WITH CHECK OPTION 子句的 视图定义,或任何依赖于指定了 WITH CHECK OPTION 子句的视图的视图。
  • 该函数的某个自变量未解析为基本表的行。 这将包括这样的情况:在外连接的结果列中有可能存在 NULL 生成的行。
  • 不能对来自复制型具体化查询表的行使用该函数。

无法处理该语句。

从不允许 函数名 的上下文中移除该函数。

sqlcode:-391

sqlstate:42881

SQL0392N

为游标 游标 提供的 SQLDA 已从先前的访存中进行了更改。 该应用程序正遵循 DB2 规则 运行,并已请求将 LOB 数据作为一个 FETCH 语句中的 LOB,并作为另一 FETCH 语句中的定位器。 这是不允许的。 无法执行该语句。

要么不使用 DB2 规则,要么更改应用程序以在连续访存之间的 SQLDA 中不将数据类型代码从 LOB 更改为定位器(或相反情况)。

sqlcode:-392

sqlstate:42855

SQL0396N

在最终调用处理期间,对象类型 对象名(特定名称 特定名称)尝试执行 SQL 语句。 在 FINAL CALL(调用类型 = 255)处理期间,例程 对象名(特定名称 特定名称)尝试执行 SQL 语句(而不是 CLOSE 游标)。 这是不允许的。 更改例程以在 FINAL CALL(调用类型 = 255)处理期间不发出 SQL 语句。

sqlcode:-396

sqlstate:38505

SQL0401N

运算 运算符 的操作数的数据类型不兼容或者不可比较。 由于下列其中一种原因,不能处理使用 运算符 的操作:

  • 操作数的数据类型必须兼容并且可比较,但是至少有一对类型不兼容或者不可比较。
  • 操作数的数据类型是 XML,该数据类型不能(与它自己或任何其他类型)进行比较。
  • 操作数的数据类型是 DATALINK,该数据类型不能(与它自己或任何其他类型)进行比较。
  • 操作数的数据类型是结构化类型,该数据类型不能(与它自己或任何其他类型)进行比较。
  • 不能直接比较两个 Hadoop 表中类型为数组的列。
  • 不能直接比较两个 Hadoop 表中类型为行的列。

联合系统用户:此数据类型违例可发生在数据源或联合服务器上。

某些数据源未向 运算符 提供适当的值。 在这些情况下,消息标记将具有以下格式:“<data-source>:UNKNOWN”,指示指定数据源的实际值未知。

无法处理该语句。

检查所有操作数的数据类型以确保其与语句的用法可比较及兼容。

如果所有 SQL 语句操作数都正确并正在访问视图,那么检查所有视图操作数的数据类型。

在 Hadoop 表中:

  • 对于数组列,请通过每次比较一个数组元素的方式来重新构造此比较,然后重新提交该操作。
  • 对于行列,请通过每次比较该行的一个元素的方式来重新构造此比较,然后重新提交该操作。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的数据类型限制。

sqlcode:-401

sqlstate:42818

SQL0402N

算术函数或运算 运算符 的操作数的数据类型无效。 对算术函数或运算符 运算符 指定了无效操作数。

无法处理该语句。

更正 SQL 语句语法,使所指定的所有函数或运算符操作数都有效。

有效操作数是数字,或者能够隐式地强制类型转换为数字数据类型。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查应用于该数据源的运算符。

sqlcode:-402

sqlstate:42819

SQL0403W

新定义的别名 名称 解析为当前未定义的对象 名称-2 已定义了别名 <name>:

  • 当前未在数据库中定义的表、视图、模块或序列
  • 解析为数据库中未定义的表、视图、模块或序列的另一个别名。

对象 <name2> 是未定义的对象。 此对象必须在任一 SQL 语句(除 CREATE ALIAS 外)可以成功地使用新创建的别名之前存在。 已创建指定的别名 <name>。

为了创建别名,一个不可用视图被认为是未定义的。

确保在 SQL 语句中使用新创建的别名(除了 CREATE ALIAS)之前定义了未定义的对象 <name2>。

sqlcode: +403

sqlstate:01522

SQL0404N

UPDATE 或 INSERT 语句中的字符串对列 名称 而言太长。 INSERT 或 UPDATE 语句指定了一个长于可存储在指示列中的最大长度字符串的值。

无法处理该语句。

注意: name 在 SQLCA 中可能返回,也可能不返回,这取决于 INSERT 或 UPDATE 语句的语法。
检查对象列的长度,更正程序或 SQL 语句,以使插入或更新字符串不超出最大长度。

sqlcode:-404

sqlstate:22001

SQL0405N

数字文字 文字 无效,因为其值超出范围。 指定的数字文字不在可接受的范围内。

SQL 值的正确范围如下所示:

  • 对于 FLOAT 值:
    • 0
    • 正数范围:+2.225E-307 到 +1.79769E+308
    • 负数范围:-1.79769E+308 到 -2.225E-307。
  • -9999999999999999999999999999999. 到 9999999999999999999999999999999. 对于 DECIMAL 值
  • 对于 INTEGER 值而言,范围是 -2147483647 到 2147483647
  • 对于小整数 (SMALLINT) 值而言,是 -32768 到 +32767。

在特定上下文中,文字可能有导致此错误的进一步限制。

联合系统用户:此范围违例可发生在数据源或联合服务器上。 位于数据源表中的 SQL 值的正确范围取决于该数据源。 要确定正确的范围,请参阅该数据源的适当文档。 某些数据源未向 文字 提供适当的值。 在这些情况下,消息标记将具有以下格式:“<data source>:UNKNOWN”,指示指定数据源的实际值未知。

范围集群表:范围定义的结束值小于起始值。

无法处理该语句。

将文字值减至适当的大小。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的数据范围限制。

范围集群表:确保范围定义中的结束值大于起始值。

sqlcode:-405

sqlstate:42820

SQL0406N

在 UPDATE 或 INSERT 语句中的数值不在它的目标列范围内。 主机变量的值或在处理 UPDATE 或 INSERT SQL 语句期间计算出的值在目标列范围之外。 此问题可能由对象列中出现的值、对这些值执行的 SQL 操作,或以上两者导致的。

无法处理该语句。

有关除数字浮点之外的数字数据类型的允许范围,请参阅 SQL0405 消息的说明。

  • 对于 DECFLOAT(16) 值:
    • 0
    • 正数范围:1.000000000000000E-383 到 9.999999999999999E+384
    • 负数范围:-9.999999999999999E+384 到 -1.000000000000000E-383
  • 对于 DECFLOAT(34) 值:
    • 0
    • 正数范围:1.000000000000000000000000000000000E-6143 到 9.999999999999999999999999999999999E+6144
    • 负数范围:-9.999999999999999999999999999999999E+6144 到 -1.000000000000000000000000000000000E-6143

这些是对正常的十进制浮点数的限制。 有效的十进制浮点值包括 INFINITY、-INFINITY、NAN、-NAN、SNAN 和 -SNAN 这些特殊值。 但这些特殊值对于所有其他 DB2 数字类型都是非法的。

注意:对于系统目录更新,请参阅 SQL Reference 以了解可更新目录的各种列中的有效范围。

sqlcode:-406

sqlstate:22003

SQL0407N

不允许对 NOT NULL 列 名称 赋予空值。 发生了下列情况之一:

  • 更新或插入值为 NULL,但是对象列在表定义中已声明为 NOT NULL。 因此:
    • 空值不可插入到该列中。
    • 更新不能将该列中的值设置为 NULL。
    • 触发器中的 SET 转换变量语句不能将该列中的值设置为 NULL。
  • 更新或者插入值是 DEFAULT,但是对象列被声明为 NOT NULL,而表定义中又没有 WITH DEFAULT。 因此:
    • 缺省值 NULL 不能插入该列。
    • 更新不能在该列设置缺省值 NULL。
    • 触发器中的 SET 转换变量语句不能在该列中设置缺省值 NULL。
  • INSERT 语句的列名列表省略了一列,该列声明为 NOT NULL,而表定义中没有 WITH DEFAULT。
  • INSERT 语句的视图省略了一列,该列声明为 NOT NULL 而基本表定义中没有 WITH DEFAULT。
  • ALTER TABLE 语句尝试使用 SET NOT NULL 来改变列,但是现有表数据包含一个具有空值的行。

如果 名称 的值的格式为“TBSPACEID=n1, TABLEID=n2, COLNO=n3”,那么在发生错误时,SQL 语句的列名不可用。 所提供的值标识不允许空值的基本表的表空间、表和列号。

联合系统用户:联合服务器或数据源可以检测到此情况。 某些数据源未向 名称 提供适当的值。 在这些情况下,消息标记将具有以下格式:“<data source>:UNKNOWN”,指示指定数据源的实际值未知。

HBase 或 Hadoop 用户:如果正在读取底层的 Hadoop 或 HBase 数据,并且发生下列其中一种情况,那么会发生此情况:

  • 底层的数据在声明为 NOT NULL 的列中包含了 NULL。
  • 在声明为 NOT NULL 的列中遇到了无效值(将隐式地视为 NULL)。

可以采用模式名.表名.列名的形式来指定 名称 的值。

无法处理该语句。

在某些情况下,标记 名称 可能不填充(SQLCA 的 sqlerrmc 字段不填充)。

检查对象表定义以确定该表的哪些列有 NOT NULL 属性且没有 WITH DEFAULT 属性后,更正该 SQL 语句。

名称 的值的格式为“TBSPACEID=n1, TABLEID=n2, COLNO=n3”,那么可以使用下列查询来确定表名和列名:


   SELECT C.TABSCHEMA, C.TABNAME,
          C.COLNAME
      FROM SYSCAT.TABLES AS T,
           SYSCAT.COLUMNS AS C
      WHERE T.TBSPACEID = n1
      AND T.TABLEID = n2
      AND C.COLNO = n3
      AND C.TABSCHEMA = T.TABSCHEMA
      AND C.TABNAME = T.TABNAME

此查询所标识的表和列可能是其 SQL 语句失败了的视图的基本表。

如果 ALTER TABLE 语句返回了错误,那么在将某列设置为 NOT NULL 时修改包含空值的列的任何行数据,然后再次尝试运行该语句。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的对象定义。 切记:不同数据源之间的缺省值(NULL 和 NOT NULL)不必相同。

对于 HBase 或 Hadoop 用户,验证底层数据文件中的数据是否正确,或者使用 ALTER TABLE 来更改列的可空性。

sqlcode:-407

sqlstate:23502

SQL0408N

值与其赋值目标的数据类型不兼容。 目标名为 名称 由 SQL 语句赋给列、参数、SQL 变量或转换变量的值的数据类型与赋值目标的已声明数据类型不兼容。

对于 Hadoop 表:

  • 不能将数组列值赋给数组变量。
  • 不能将行列值赋给行变量。
  • 复杂类型(数组或行)列值与变量不兼容,不能进行赋值。

无法处理该语句。

检查语句和可能的目标表或视图以确定目标数据类型。 确保所赋予的变量、表达式或文字值具有正确的赋值目标数据类型。

对于用户定义的结构化类型,还应将该语句的变换组中定义的 TO SQL 变换函数的参数视作赋值目标。

sqlcode:-408

sqlstate:42821

SQL0409N

COUNT 函数的操作数无效。 如在 SQL 语句中所指定的那样,COUNT 函数的操作数不符合 SQL 语法的规则。 仅允许 COUNT(*) 和 COUNT(DISTINCT column)。

无法处理该语句。

指定 COUNT(*) 或 COUNT(DISTINCT column)。

注意:此消息仅适用于版本 2 之前的 DB2 版本。

sqlcode:-409

sqlstate:42607

SQL0410N

数值  太长。 指定的值太长。 浮点字符串的最大长度为 30 个字符。 十进制浮点字符串的最大长度为 42 个字符。

无法处理该语句。

缩短指定的文字。

sqlcode:-410

sqlstate:42820

SQL0412N

从仅允许一列的子查询中返回了多列。 在 SQL 语句的上下文中,指定全查询只能有一列作为结果。

无法处理该语句。

当只允许标量全查询时,只指定一列。

sqlcode:-412

sqlstate:42823

SQL0413N

在数字数据类型转换期间发生溢出。 在 SQL 语句处理期间,当从一个数字类型转换到另一个数字类型时发生溢出情况。 根据 SQL 的标准规则执行数字转换。

联合系统用户:联合服务器和/或数据源处可进行数字转换。

无法处理该语句。 未检索、更新或删除数据。

检查 SQL 语句的语法,以确定错误原因。 如果问题与数据相关,那么可能需要检查出错时处理的数据。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的数据范围限制。

sqlcode:-413

sqlstate:22003

SQL0415N

对应列的数据类型在包括集合运算符的全查询中不兼容,或在 INSERT 或全查询的 VALUES 子句的多行中不兼容。 在各种语句处都有可能发生此错误。

  • 在包括集合运算(UNION、INTERSECT 或 EXCEPT) 的 SELECT 或 VALUES 语句中可能发生此错误。 构成 SELECT 或 VALUES 语句的子查询或全查询的对应列不兼容。
  • 在正在插入多行的 INSERT 语句中可能发生此错误。 在此情况下,在 VALUES 子句中指定的行的对应列不兼容。
  • 在将 VALUES 子句配合多行使用的 SELECT 或 VALUES 语句中可能发生此错误。 在此情况下,在 VALUES 子句中指定的行的对应列不兼容。
  • 如果对两个 Hadoop 表使用 UNION ALL 子句,并且每个表都有类型为 ARRAY 的列,那么可能会发生此错误。

当构造函数中所列示的两个值的数据类型不兼容时,数组构造函数中可能就会发生此错误。

有关数据类型兼容性的详细信息,请参阅 SQL Reference 中的“赋值和比较”。

无法处理该语句。

更正在 SELECT 语句中使用的列名或 VALUES 子句中的表达式,以使所有对应的列为兼容类型。

sqlcode:-415

sqlstate:42825

SQL0416N

不能在由非 UNION ALL 的集合运算符连接的 SELECT 或 VALUES 语句中指定长于 254 字节的结果列。 由一个集合运算符连接的 SELECT 或 VALUES 语句之一指定了一个长于 254 字节的结果列。 长于 254 字节的 VARCHAR 或 VARGRAPHIC 结果列只能配合 UNION ALL 集合运算符使用。

无法处理该语句。

或者使用 UNION ALL 运算符代替 UNION,或者从 SELECT 或 VALUES 语句中移除长于 254 字节的结果列。

sqlcode:-416

sqlstate:42907

SQL0417N

要预编译的语句字符串包含作为同一运算符的操作数的参数标记。

指定为 PREPARE 或 EXECUTE IMMEDIATE 的对象的语句字符串包含谓词或表达式,在该谓词或表达式中,参数标记已用作没有 CAST 规范的同一运算符的操作数。 例如:

    ? > ? 

无法处理该语句。

不支持此语法。 使用 CAST 规范为至少一个参数标记指定一个数据类型。

sqlcode:-417

sqlstate:42609

SQL0418N

由于此语句包含对下列其中一项内容的无效使用,因此未处理此语句:隐式类型参数标记、DEFAULT 关键字或空值。 您在许多场景中都会遇到此消息,并且返回此消息的原因众多。

下面是一些有可能导致返回此消息的原因示例:

  • 指定了 DEFAULT 关键字作为日期时间算术运算的唯一自变量。
  • 在并非预编译语句的语句中使用了参数标记。 (注意,在 XQuery 函数 db2-fn:sqlquery 的第一个自变量中,对 PARAMETER 函数的引用也会被视为参数标记。)
  • 空值被指定为 XML 函数(例如,XMLQUERY)的自变量。
  • CASE 表达式的所有结果表达式都具有隐式类型。
通过执行以下故障诊断步骤对此错误作出响应:

  1. 标识此语句中下列各项的所有实例:
    • 隐式类型参数标记
    • DEFAULT 关键字
    • 隐式类型空值
    • 隐式类型表达式
  2. 复查参考信息,以了解任何隐式类型参数标记、DEFAULT 关键字实例、隐式类型空值或隐式类型表达式所处的上下文。
  3. 更正语句的语法。 建议:
    • 使用 CAST 规范对隐式类型表达式指定数据类型
    • 将 DEFAULT 关键字的实例替换为某个值
  4. 再次执行此语句。

sqlcode:-418

sqlstate:42610

SQL0419N

十进制除法运算无效,因为结果将有一个负小数位。 指定的十进制除法无效,因为它会产生一个负小数位。

内部用于计算十进制除法结果的小数位的公式是:

Scale of result = 31 - np + ns - ds 

其中,np 是分子的精度,ns 是分子的小数位,而 ds 是分母的小数位。

联合系统用户:联合服务器和/或数据源处可执行十进制除法。 指定的十进制除法生成对该数据源无效的小数位。

无法处理该语句。

检查并确保可能参与十进制除法的所有列的精度和小数位。 注意:在此计算中,可将整数或小整数值转换为小数。

联合系统用户:如果原因未知,那么找出导致请求失败的数据源中的问题,并检查该数据源的数据范围限制。

sqlcode:-419

sqlstate:42911

SQL0420N

在函数 函数名 的字符串自变量中找到无效字符。 函数 函数名 的字符串自变量包含在数字 SQL 常量中无效的字符。 由于使用 CAST 规范并将 函数名 作为目标数据类型,或者将一个自变量隐式强制类型转换为数字数据类型而调用了此函数。 用于 SQL 语句中的函数或数据类型可能是 函数名 的同义词。

如果十进制字符在 DECIMAL 函数中指定,那么其为必须用作缺省十进制字符的字符。

确保正转换为数字类型的字符串仅包含在数字 SQL 常量中有效的字符,如果指定,使用十进制的字符。

sqlcode:-420

sqlstate:22018

SQL0421N

集合运算符或 VALUES 子句的操作数没有相同列数。 集合运算符(诸如 UNION、EXCEPT 或 INTERSECT)的操作数必须有相同的列数。 VALUES 子句中的行必须有相同的列数。

无法处理该语句。

更改 SQL 语句,使每个操作数或 VALUES 子句中的每行有完全相同的列数。

sqlcode:-421

sqlstate:42826

SQL0423N

定位器变量 变量位置 当前不表示任何值。 定位器变量出错。 未对其指定有效结果集定位器或 LOB 定位器变量值,已释放与该变量相关联的定位器,或者已关闭结果集游标。

如果提供 变量位置,那么它给出出错变量在指定的变量集中的序数位置。 根据检测到错误的时间的不同,数据库管理器可能无法确定 变量位置

与序数位置不同,变量位置 可能具有值“函数名 RETURNS”,这表示从函数名标识的用户定义的函数中返回的定位器值出错。

请更正程序或例程以使在 SQL 语句中使用的定位器变量在执行该语句之前具有有效值。

可以通过 SELECT INTO 语句、VALUES INTO 语句或 FETCH 语句将 LOB 值赋给定位器变量。

ASSOCIATE LOCATORS 语句返回结果集定位器值。 结果集定位器值仅在基本 SQL 游标打开时有效。 如果运行了落实或回滚操作,那么与游标相关联的结果集定位器就不再有效。 如果这是 WITH RETURN 游标,那么确保在尝试分配它之前,打开该游标。

如果应用程序代码满足下列所有情况:

  • 应用程序包含对定义结果集(包含 LOB 列)的查询所声明的游标
  • 游标声明包含 WITH HOLD 子句
  • LOB 定位器用于引用游标结果集中的 LOB 值
  • 在关闭游标之前已经落实了工作单元

请执行下列其中一项操作来移除导致此警告情况的因素,以便成功地对应用程序进行升级:

  • 使用 PREP 命令对应用程序进行预编译,并确保指定了 SQLRULES STD 选项。
  • 如果可能,请改变应用程序以便 LOB 列作为值而不是定位器进行检索。
  • 如果可能,请改变应用程序以便游标不再使用 WITH HOLD 选项进行声明,然后在关闭游标前移除此落实。

sqlcode:-423

sqlstate:0F001

SQL0426N

对于应用程序执行环境而言,动态落实无效。 在 CONNECT TYPE 2 环境或诸如 CICS 的“分布式事务处理”(DTP) 环境中执行的应用程序,尝试执行 SQL 动态 COMMIT 语句。 SQL 动态 COMMIT 语句不可在此环境中执行。

联合系统用户:在传递会话中,不能执行 SQL 动态 COMMIT 语句。

  • 使用 DTP 环境提供的落实语句执行落实。 例如,在 CICS 环境中,这将是 CICS SYNCPOINT 命令。
  • 如果此语句是在存储过程中执行的,那么整个地移除该语句。

联合系统用户:注释掉 COMMIT 语句,或将它编码为静态语句。 然后重新提交您的程序。

sqlcode:-426

sqlstate:2D528

SQL0427N

对于应用程序执行环境,动态回滚无效。 在 CONNECT TYPE 2 环境或诸如 CICS 的“分布式事务处理”(DTP) 环境中执行的应用程序,尝试执行 SQL 动态 ROLLBACK 语句。 SQL 动态 ROLLBACK 语句不可在此环境中执行。

联合系统用户:在传递会话中,不能执行 SQL 动态 ROLLBACK 语句。

  • 使用 DTP 环境提供的回滚语句执行回滚。 例如,在 CICS 环境中,这将是 CICS SYNCPOINT ROLLBACK 命令。
  • 如果此语句是在存储过程中执行的,那么整个地移除该语句。

联合系统用户:注释掉 ROLLBACK 语句,或将它编码为静态语句。 然后重新提交您的程序。

sqlcode:-427

sqlstate:2D529

SQL0428N

只允许将该 SQL 语句作为工作单元的第一条语句。 所发出的 SQL 语句需要在启动工作单元的其他任何 SQL 语句之前执行。 以下是各种可能的情况:

  • SQL 语句必须是工作单元中的第一条语句,且已经对工作单元内的连接发出了 SQL。
  • SQL 语句必须是工作单元中的第一条语句,且 WITH HOLD 游标当前对连接是打开的。

请注意,当语句是 DISCONNECT ALL 时,它将导致对所有连接都执行 DISCONNECT,因此,如果有任何连接违反前面描述的限制,请求都将失败。

在处理 SQL 语句之前,发出 COMMIT 或 ROLLBACK。 如果有任何 WITH HOLD 游标,那么将需要将其关闭。 如果语句是 SET INTEGRITY,那么移除 COMMIT THRESHOLD 子句。

sqlcode:-428

sqlstate:25001

SQL0429N

已超过并发 LOB 定位器的最大数目。 DB2 支持每个工作单元的并发 LOB 定位器的最大数目为 4,000,000。 修改程序,以便它需要较少的并发 LOB 定位器,然后再次运行该程序。 例如,一旦应用程序不再需要 LOB 定位器,就使用 FREE LOCATOR 语句将它们释放。

sqlcode:-429

sqlstate:54028

SQL0430N

用户定义的函数 函数名(特定名称 特定名称)已异常终止。 当指定的 UDF 在控制之中时,发生了异常终止。 需要修正 UDF。 与 UDF 的程序设计者或数据库管理员联系。 在修正 UDF 之前,不应使用。

sqlcode:-430

sqlstate:38503

SQL0431N

用户已经中断用户定义的例程、触发器或匿名块。 对象名:对象名。 特定于对象的名称:特定名称。 对象类型:对象类型 当例程、触发器或匿名块在控制之中时,发生了用户中断或客户机中断。

匿名块没有对象名或特定名称,并被标识为一个对象类型“BEGIN…END”。

遇到此消息可能指示逻辑中存在一些问题,例如无限循环或等待。

如果问题仍存在(即,中断的需要会导致相同的错误情况),请与例程、触发器或匿名块的程序设计者或者您的数据库管理员联系。

sqlcode:-431

sqlstate:38504

SQL0432N

参数标记或空值不能具有用户定义的类型名或引用目标类型名 用户定义的类型名 已确定语句中的隐式类型表达式(参数标记或空值)具有用户定义的类型 用户定义的类型名 或具有带目标类型 用户定义的类型名 的引用类型,该类型与使用参数标记的上下文有关。 除非隐式类型表达式是赋值的一部分(INSERT 的 VALUES 子句或 UPDATE 的 SET 子句),或使用 CAST 规范显式地将它强制类型转换为用户定义的单值数据类型或引用数据类型,否则隐式类型表达式不能将用户定义的类型或引用类型作为其数据类型。

无法处理该语句。

将隐式类型表达式显式强制类型转换为用户定义的单值数据类型或引用数据类型。 备用方法是将采用用户定义的单值数据类型的列强制类型转换为其相应的源数据类型,或者将采用引用数据类型的列强制类型转换为其相应的表示法类型。

sqlcode:-432

sqlstate:42841

SQL0433N

值  太长。 值  要求被系统(内置)强制类型转换函数或调整函数截断,调用强制类型转换函数或调整函数的目的是以某种方式变换值。 在使用此值处不允许截断。

正在变换的值是下列其中一项:

  • 用户定义的函数 (UDF) 的自变量
  • 对 UPDATE 语句的 SET 子句的输入
  • 正插入表中的值
  • 其他某个上下文中的强制类型转换函数或调整函数的输入
  • 一个被递归引用的列,其数据类型和长度由递归的初始化部分确定,且可能在递归的迭代部分中增长
  • 一个 XML 数据值正在被 XMLSERIALIZE 函数序列化为输出。

无法处理该语句。

如果  是 SQL 语句中的文字串,那么对于其计划的使用而言太长。

如果  不是文字串,那么检查 SQL 语句以确定变换在何处发生。 变换的输入太长或目标太短。

更正问题并重新运行该语句。

sqlcode:-433

sqlstate:22001

SQL0434W

已将子句 子句 的不受支持的值替换为值  不支持为子句 子句 指定的值,并已使用标识的支持值  将其替换。 如果所选值可接受,那么不需要更改。 否则,指定对 子句 有效的值。

sqlcode:+434

sqlstate:01608

SQL0435N

指定了无效的应用程序定义的 SQLSTATE sqlstate 由 RAISE_ERROR 函数或在 SIGNAL 或 RESIGNAL 语句上指定的 SQLSTATE 值不符合应用程序定义的 SQLSTATE 的规则。 更正 SQLSTATE 的指定值。 SQLSTATE 值必须是刚好包含 5 个字符的字符串。 它必须是长度定义为 5 的 CHAR 类型,或者是长度定义为 5 或更长的 VARCHAR 类型。 SQLSTATE 值必须遵循应用程序定义的 SQLSTATE 的规则。

以下是用于在 SIGNAL 或 RESIGNAL 语句上指定的 SQLSTATE 值的规则。

  • 每个字符必须来自数字集(“0”到“9”)或者非重音大写字母(“A”到“Z”)。
  • SQLSTATE 类(前两个字符)不能是“00”。

以下是用于 RAISE_ERROR 函数指定的 SQLSTATE 值的规则

  • 每一字符必须来自数字集(“0”到“9”)或者非重音大写字母(“A”到“Z”)
  • SQLSTATE 类(前两个字符)不能是“00”、“01”或“02”,因为这些不是错误类。
  • 如果 SQLSTATE 类(前两个字符)以字符“0”到“6”或“A”到“H”开始,那么子类(后三个字符)必须以范围“I”到“Z”中的一个字符开始
  • 如果 SQLSTATE 类(前两个字符)以字符“7”、“8”、“9”或“I”到“Z”开始,那么子类(后三个字符)可以为“0”到“9”或“A”到“Z”中的任何一个。

sqlcode:-435

sqlstate:428B3

SQL0436N

C 语言以 NULL 结束的字符串主机变量中丢失终止 NULL 字符。 C 编程语言中输入主机变量代码的值要求在字符串末尾有 NULL 终止符。

无法处理该语句。

确保输入主机变量的值是以 NULL 终止符结束的。

sqlcode:-436

sqlstate:22024

SQL0437W

此复杂查询的性能可能是次优的。 原因码:原因码 查询优化是其中一个影响应用程序性能的因素。 SQL 和 XQuery 编译器执行多个步骤以生成可以执行的存取方案。

通常,当复杂查询所需要的资源却得不到时,或者当遇到了优化边界条件时,将会返回此消息。

原因码更详细地说明了性能可能为次优性能的原因:

1
由于内存约束而改变了连接枚举方法
2
由于查询复杂性而改变了连接枚举方法
3
优化器成本下溢
4
优化器成本溢出
5
查询优化类太低
6
优化器允许统计信息不一致
13
无法应用优化准则
15
选择的方案将具体化中间结果集,其大小可能超过了注册表变量 DB2_OPT_MAX_TEMP_SIZE 所强加的限制
16
查询中包含在分区数据库环境中不会并行执行的 XQuery 变换表达式。

将处理该语句。

如果查询的性能未达到最优,请执行下列其中一项或多项操作:

  • 增大数据库配置文件中语句堆 (stmtheap) 的大小。 增大 stmtheap 配置参数之后,使得重新编译语句。 (原因码 1)
  • 将该语句分成较简单的数条 SQL 语句。 (原因码 1、2、3 和 4)
  • 确保谓词未覆盖-请指定答案集。 (原因码 3)
  • 将当前查询优化类更改为较小的值。 (原因码 1、2、4)
  • 对于查询中涉及到的对象,使用 RUNSTATS 命令(对于本地表)、NNSTAT 过程(对于昵称)或者 ANALYZE 命令(对于 Hadoop 和 HBase 表)。 (原因码 3 和 4)
  • 将当前查询优化类更改为更高的值。 (原因码 5)
  • 对于查询中涉及到的表及其相应的索引,重新发出 RUNSTATS 命令(对于本地表)、NNSTAT 过程(对于昵称)或者 ANALYZE 命令(对于 Hadoop 和 HBase 表),即,使用 AND INDEXES ALL 子句,以便表和索引统计信息一致。 (原因码 6)
  • 使用 Explain 诊断工具来获取有关无法应用优化准则的原因的更详细信息。 (原因码 13)。
  • 如果一个溢出排序导致了具体化,那么尝试创建一个将避免进行排序的索引。 要消除警告,可增大由注册表变量 DB2_OPT_MAX_TEMP_SIZE 指定的值或者彻底取消其设置。 (原因码 15)
  • 将服务器选项 CPU_RATIO、IO_RATIO 或 COMM_RATE 或者函数映射选项 IOS_PER_INVOC、INSTS_PER_INVOC、IOS_PER_ARGBYTE、INSTS_PER_ARGBYTE、PERCENT_ARGBYTES、INITIAL_IOS 或 INITIAL_INSTS 设置为一个不太大也不太小的值。 (原因码 3 和 4)
  • 重写该查询,以使变换表达式并行化。 (原因码 16)

sqlcode:+437

sqlstate:01602

SQL0438N

应用程序发生错误或警告,其诊断文本为:文本 在触发器中执行 RAISE_ERROR 函数或者 SIGNAL SQLSTATE 语句的结果是出现此错误或警告。 以“01”或“02”开始的 SQLSTATE 值指示出现警告的情况。 请参阅应用程序文档。

sqlcode:-438, +438

sqlstate:由应用程序定义

SQL0439N

用户定义的函数 function-name 被函数 source-function 间接实现,导致错误 sqlcode 。 在用户语句中引用了函数 函数名。 但是,因为 SOURCE 子句在此函数的定义中使用,结果是函数 源函数 实际上实现该函数。 (这可能是从 函数名 到 源函数 的直接或间接定义路径。) 在编译时,源函数 的封装器(代表函数执行的 DB2 代码)已返回由 sqlcode 标识的错误。 实际错误情况需要在可执行更正操作前更好地了解。 查阅 sqlcode 的解释。 如果 源函数 是内置函数,那么 sqlcode 应指示问题,就像在用户语句中直接引用内置函数时的情形一样。 如果 源函数 是用户定义的函数,那么该消息最可能指示一个自变量的问题或函数结果的问题。

更正问题,然后重试。

sqlcode:-439

sqlstate:428A0

SQL0440N

未找到参数兼容的 routine-name 类型为 routine-type 的授权例程。 当数据库管理器找不到可用来实现引用的例程时,如果引用例程 例程名,那么会发生此错误。 引起此错误的原因有下列几个:

  • 例程名 未正确指定或者在数据库中不存在。
  • 进行了限定引用,但不正确地指定了限定符。
  • 用户的 SQL 路径未包含期望的函数或方法所属的模式,且使用了一个非限定引用。
  • 用户的 SQL 路径未包含期望的例程所属的模块。
  • 从模块外部进行了模块限定的例程引用,但尚未发布该模块例程。
  • 所包括的自变量的数目不正确。
  • 函数或方法引用中包括的自变量的数目正确,但是一个或多个自变量的数据类型不正确。
  • 使用了指定自变量,这些自变量与例程 例程名称 的参数名称都不匹配。
  • 有一个或多个例程具有在当前复合语句中声明的相同名称和数目的参数。
  • 有一个或多个例程具有在外层复合语句中声明的相同名称,当前用于声明例程的复合语句就嵌套在这些复合语句中。
  • 例程不存在于具有在绑定程序包时使用的相同函数标识的数据库中(适用于静态语句)。
  • 找不到与 UPDATE 语句中所使用的属性赋值相对应的 mutator 方法。 新属性值的数据类型与该属性的数据类型不同,并且不是可提升为该属性的数据类型的数据类型。
  • 例程调用程序无权执行该例程。
  • 服务器时间已复位或更改。
  • 在服务器上用不同时间或时区复原了数据库。
  • 与多分区数据库环境中的成员相关联的时间不同步。
修正问题,然后再次尝试。 这可能涉及目录访问、更改语句、授予对例程调用程序的执行特权、新函数的添加和/或 SQL 路径的更改。

sqlcode:-440

sqlstate:42884

SQL0441N

对函数 函数名 使用关键字 DISTINCT 或 ALL 无效。

有几种可能的原因。

  • 在对函数 函数名 的引用中检测到圆括号内的关键字 DISTINCT 或 ALL,且该函数已解析为标量函数。 对标量函数使用关键字 DISTINCT 或 ALL 是无效的。
  • 在不支持 DISTINCT 关键字的列函数中使用该关键字。 这些函数包括 COVARIANCE、CORRELATION 和线性回归函数(以 REGR 开始的那些函数)。
  • 期望该函数是支持关键字 ALL 或 DISTINCT 的列函数,但未将其解析为列函数。
  • 如果正在使用标量函数,那么移除关键字 DISTINCT 或 ALL。 对于标量函数是无效的。
  • 如果该函数是不支持 DISTINCT 或 ALL 关键字的列函数,那么移除那些关键字。
  • 如果正在使用列函数,那么函数解析有问题。 检查路径以查看是否期望的函数在其中一个模式中,且还在 SYSFUNCTIONS 目录中检查函数名的拼写及参数的数目和类型。

更正错误,然后再次尝试。

sqlcode:-441

sqlstate:42601

SQL0442N

在引用例程 例程名 时出错。 超过了允许的最大自变量数(90)。 在对例程 例程名 的引用中指定了太多的自变量。 最大允许值为 90。 通过确保使用了正确的自变量数目更正语句,然后再次尝试。

sqlcode:-442

sqlstate:54023

SQL0443N

例程 例程名称(特定名称 特定名称)返回错误 SQLSTATE,且诊断文本为 文本 如果内置例程或者用户定义的例程(过程、函数或方法)失败,那么会返回此消息。

第三个运行时标记的内容 文本 在不同情况下会有所不同:

  • 如果由于用户定义的例程失败而返回此消息,那么第三个运行时标记的内容 文本 是由此例程的创建者实现的内容。
  • 通常,如果由于内置例程失败而返回此消息,那么第三个运行时标记的内容 文本 将包含嵌入的错误代码:示例 1 – 在此示例中,文本 是指消息 DBA7904N。
    
    [IBM][CLI Driver][DB2/AIX64] SQL0443N Routine
    "SYSPROC.ALTOBJ" (specific name "ALTOBJ") has
    returned an error SQLSTATE with diagnostic text
    "DBA7904, DBAD".  SQLSTATE=38553
    

    示例 2 – 在此示例中,文本 是指 sqlcode -805。

    
    [IBM][CLI Driver][DB2/AIX64] SQL0443N Routine
    "SYSIBM.SQLTABLES" (specific name "TABLES") has
    returned an error SQLSTATE with diagnostic text
    "SYSIBM:CLI:-805".  SQLSTATE=38553
    
  • 如果由于 SYSFUN 模式中的内置函数失败而返回此消息,那么第三个运行时标记 文本 的格式如下:
    
    SYSFUN:nn
    

    其中 nn 是原因码,其含义如下:

    01
    数值超出范围
    02
    被零除
    03
    算术溢出或下溢
    04
    日期格式无效
    05
    时间格式无效
    06
    时间戳记格式无效
    07
    时间戳记持续时间的字符表示法无效
    08
    时间间隔类型无效
    09
    字符串太长
    10
    字符串函数中的长度或位置超出范围
    11
    浮点数的字符表示法无效
    12
    内存不足
    13
    意外错误
通过下列其中一种方式对此错误作出响应:

  • 如果由于用户定义的过程、函数或例程失败而返回此消息,请复查第三个运行时标记 文本 中的任何诊断信息,并与此过程、函数或例程的编写者一起进行故障诊断以找出问题的原因。
  • 如果由于 DB2 内置过程、函数或例程失败而返回此消息,执行以下故障诊断步骤:
    1. 确定嵌入在第三个运行时标记 文本 中的错误代码。
    2. 请参阅给定 sqlcode 的详细信息。
    3. 在 db2diag 日志文件中复查其他诊断信息(例如,嵌入的错误代码的任何运行时标记的值)。

SQL0444N

例程 例程名称(特定名称 特定名称)是用库或路径 库或路径,不能访问的函数 函数代码标识 中的代码实现的。 原因码:code 数据库管理器尝试访问实现例程 例程名称(特定名称 特定名称)的代码的主体,但由于原因码 代码(代码列示如下)所给出的原因,不能访问该代码主体。 实现该例程的文件是由 库或路径 标识的,而函数是由 函数代码标识 标识的。

由于对可用的最大标记长度具有限制,因此,库名、路径名或者函数名可能会被截断。 可以使用以下查询从系统目录视图中获取完整的库路径和函数名:


     SELECT implementation
     FROM syscat.routines
     WHERE specificname = 'specific-name'
1
路径名 库或路径 超过了最大长度(255 个字节)。
2
无法从 DB2 中检索到数据库管理器实例路径名。
3
找不到路径 库或路径
4
因为下列原因之一导致找不到 库或路径 中的文件:

  1. 在由例程 CREATE 语句定义中的 EXTERNAL 子句指定的位置未提供与例程相关联的例程库。
  2. 例程库依赖于这样一个共享库:在 LIBPATH 环境变量(对于基于 UNIX 的系统)或者 PATH 环境变量(对于 Windows 系统)中指定的目录的并置中找不到该共享库。 可能会涉及多个间接级别,最终导致此原因码。 例如,可以找到例程实体 X,并且还可以找到它所需要的共享库 Y。 而共享库 Y 需要另一个共享库 Z,但是找不到共享库 Z。
  3. 这是一个分区数据库,而该库并不位于运行用户定义的函数的其中一个分区中。
5
没有足够的内存来装入包含该函数的库,或不能解析一个或多个符号。 此原因码指示下列情况之一:

  1. 可能尚未解析一个或多个符号。 例程库可能依赖于这样一个共享库:使用在 LIBPATH 环境变量(对于基于 UNIX 的系统)和 PATH 环境变量(对于 INTEL 系统)中指定的目录的并置无法找到该共享库。
  2. 例程有一个在 32 位实例中不受支持的 64 位库;或者例程有一个 32 位库或 DLL,但该库或 DLL 位于与例程定义不兼容的 64 位实例中。
  3. 没有足够的内存来装入包含该函数的库。
6
在指定的库中找不到函数 函数代码标识
7
作为函数名(函数代码标识)给定的符号不是指定的库中有效函数的名称。
8
“load” 系统功能由于此消息中给出的原因之外的原因而失败。 可能尚未链接或者根本就未链接对象文件。
9
没有足够内存来解析 库或路径 中标识的库中的函数名 函数代码标识
10
“loadquery” 系统调用失败。 只有在 UNIX 操作系统上才会发生这种情况,它是尚未正确安装数据库管理器的一种症状。
11
代理进程正搜索应在 libdb2.a 库中的特定数据库管理器函数,但找不到。 只有在 UNIX 操作系统上才会发生这种情况,它是未正确安装数据库管理器的一种症状。
15
系统访问或网络访问被拒绝。 在 Windows 环境中,如果例程定义语句中的 EXTERNAL NAME 规范不指定完整路径,或者 db2_installation_path\function 目录中不存在该函数,那么会发生此情况,因而必须使用 PATH 环境变量来进行搜索。 例如,如果 PATH 中在包含您的函数的目录前面有 LAN 驱动器,而实例正在 SYSTEM 帐户下运行,那么可能会产生此原因码。
16
找到了多个可以与函数 函数代码标识 匹配的 Java 方法。
其他:
发生了无法识别的系统故障。

联合系统用户:如果此用户定义的函数是函数模板(因此无需将代码保留在联合服务器上),那么考虑修改 SQL 语句或统计信息以便在远程数据源上对此函数求值。

对每个原因码给出:

1
需要更改例程定义以指定较短的路径,或者数据库管理器实例路径名太长。 分析 DB2 目录视图中的例程定义,以确定要执行的操作。 可能需要将函数体移到一个路径名较短的目录中。
2、10 和 11
咨询系统管理员,并向他们提供相应原因码的完整文本。
3、6 和 7
咨询例程创建者或数据库管理员。 并向他们提供相应原因码的完整文本。 将需要更正例程定义或例程库的位置。
4
按消息说明中提供的原因将可以采用的解决方案进行了分组:

  1. 使例程库与可用的例程相关联:
    • 更正例程定义 EXTERNAL 子句值,或者验证例程库是否位于由 EXTERNAL 子句指定的位置。
    • 对于内置例程,如果您最近已将数据库更新为另一个需要更新系统目录的修订包级别,那么发出“将数据库更新为当前发行版”命令以更新包含内置例程的系统目录,然后重新启动此实例。
    • 验证数据库管理器是否可以访问例程库。 对于受防护的例程,验证受防护进程的所有者是否对库或 DLL 具有 EXECUTE 访问许可权。 对于不受防护的例程,验证实例所有者是否对库或 DLL 具有读访问许可权。
  2. 应重新链接例程,或者用户应验证 LIBPATH(UNIX)或 PATH(INTEL)中是否提供了相关库。 使用 db2set 命令来将 LIBPATH 更新为包括库或 DLL 所在的路径。 例如,db2set db2libpath=/db2test/db2inst1/sqll
  3. 在分区数据库中,与用户定义的函数相关联的库在数据库的所有分区上都必须可作为 库或路径 来访问。 验证是否已将例程库部署至数据库的所有分区上的功能目录。
5
已对可以采用的解决方案进行排序,以便与消息说明中提供的原因相匹配:

  1. 可能会涉及多个间接级别,最终导致此原因码。 例如,可以找到例程实体 X,它需要共享库 Y(也可以找到),而共享库 Y 需要另一个共享库 Z,但是无法找到共享库 Z。 应重新链接例程库,或者用户应验证 LIBPATH(UNIX)或 PATH(INTEL)中是否提供了所有相关库。 使用 db2set 命令来将 LIBPATH 更新为包括库所在的路径。 例如:db2set db2libpath=/db2test/db2inst1/sqll
  2. 使用受支持的库。
  3. 如果确定内存不足,那么可能需要更改系统配置,为 DB2 腾出更多的可用内存。
8
确保正确链接了模块。
9
与例程创建者或数据库管理员联系,确保正确链接了包含该函数的库。 可能需要更改系统配置以便为数据库服务器提供更多内存。
15
验证例程定义语句中的 EXTERNAL NAME 子句是否包含完整路径,或者函数是否存在于 db2_installation_path\function 目录中。

如果存在其中任何一种情况,并且发生错误的原因是实例运行时所使用的帐户无权访问 PATH 环境变量中包含您的函数的目录之前的 LAN 驱动器,那么您需要重新配置 DB2 服务,以便使用有权访问 PATH 环境变量中的所有网络路径的用户帐户运行。

将用户帐户指定给 DB2 服务时,请确保对帐户授予了所有必需的高级用户权限。

16
验证例程定义语句的 EXTERNAL NAME 子句中引用的 库或路径 类是否包含函数 函数代码标识,可以根据例程定义语句中的 SQL 数据类型来解析该函数,而不会具有不确定性。

如果在例程定义语句中使用 PARAMETER STYLE HIVE 定义了例程,请检查例程实现是否有多个 函数代码标识 方法。 例如,如果有多个 函数代码标识 方法,请确保任何两个方法在可以使用相互替换的 java.lang.String 类或 org.apache.hadoop.io.Text 时,不包含相同的参数列表。

其他:
记下代码并咨询系统管理员。

联合系统用户:如果此用户定义的函数是函数模板(且因此无需代码驻留在联合服务器上),那么可能要考虑修改 SQL 语句或统计信息以便在远程数据源上对此函数求值。

sqlcode:-444

sqlstate:42724

SQL0445W

值  已被截断。 当系统(内置)强制类型转换函数、调整函数或代码页转换函数以某种方式变换值  时,该值被截断。 这是警告情况。

正在变换的值可以时下列其中一项:

  • 例程(用户定义的函数 (UDF) 或方法)的输出,且是因例程定义中的 CAST FROM 规范而进行变换的。
  • 源于另一个函数并且需要对结果进行变换的例程(用户定义的函数 (UDF) 或方法)的输出。
  • 在处理期间需要执行代码页转换(例如,由于字符串长度单位规范而需要转换)的内置字符串处理例程的输出。
确保输出是期望的输出并且截断未产生任何意外的结果。

sqlcode:+445

sqlstate:01004

SQL0447W

语句包含涉及子句 子句 的冗余规范。 语句中多次包括 子句 关键字。 这是一个警告条件。 如果是有意造成冗余,或者如果可以确定其不会有有害结果,那么不需要任何响应。 所谓“有害”类型指的是可包括,例如,某些其他期望关键字的省略。

sqlcode:+447

sqlstate:01589

SQL0448N

定义例程 例程名 时出错。 已超过允许的最大参数个数(对于用户定义的函数和方法为 90 个,对于存储过程为 32767 个)。 定义例程 例程名 时指定了太多的参数。 例程定义语句可以是 CREATE FUNCTION、CREATE PROCEDURE、CREATE TYPE(方法定义)、或 ALTER TYPE(方法定义)。 更改该语句以包括较少的参数。

sqlcode:-448

sqlstate:54023

SQL0449N

定义例程 例程名 的语句在 EXTERNAL NAME 子句中包含无效格式化的库/函数标识。 在用户定义的函数 (UDF)、用户定义的方法或过程 例程名 的 CREATE 语句的 EXTERNAL NAME 子句中发现错误。 库/函数标识遵循以下规则:

对于 LANGUAGE C,名称采用格式“<a>”或“<a>!<b>”,如下所示:

  • <a> 是包含要调用的例程(函数)的文件名
  • <b> 是 <a> 中的入口点(函数),它将作为例程的主体被调用。 如果省略了 <b>,那么将使用 <a> 的缺省入口点。

对于 LANGUAGE OLE,名称采用格式“<a>!<b>”,如下所示:

  • <a> 是 OLE 对象的编程或类标识
  • <b> 是要调用的对象的方法。

对于 LANGUAGE JAVA 和 LANGUAGE CLR,名称采用格式“<a>:<b>!<c>”,如下所示:

  • <a> 是类所在的 jar 标识 (LANGUAGE JAVA) 或组合件文件 (LANGUAGE CLR)。“<a>:”对于 LANGUAGE JAVA 是可选的,如果省略了它,那么相应的类必须驻留在函数目录或 CLASSPATH 中。
  • <b> 是要调用的方法所在的类
  • <c> 是要调用的方法。 对于 LANGUAGE JAVA,“.<c>”可用作“!<c>”的替代方法

对于所有语言,在单引号、对象标识符或分隔字符之间不允许有前导或末尾的空白字符(例如,“<a> ! <b>”无效)。 但是,如果平台允许,路径和文件名可以包含空格。

对于所有文件名,都可以通过使用名称的简短格式(示例:math.a(在 UNIX 上)和 math.dll(在 Windows 上))或标准路径名(示例:/u/slick/udfs/math.a(在 UNIX 上)和 d:\udfs\math.dll(在 Windows 上))来指定文件。 如果使用文件名的简短格式,那么该文件必须位于如下所示的位置:

  • 如果平台为 UNIX 或者例程为 LANGUAGE CLR 例程:在函数目录中
  • 否则,如果平台为 Windows:在系统 PATH 中

文件扩展名(示例:.a (在 UNIX 上)和 .dll(在 Windows 上))应始终包括在文件名中。

更正问题,然后重试。 一个可能的原因是包含空白,或具有“!” 或“:”在名称的开头或结尾。

sqlcode:-449

sqlstate:42878

SQL0450N

例程 例程名(特定名称 特定名称)生成了太长的结果值、SQLSTATE 值、消息正文或暂存区。

在从例程 例程名 (特定名称 特定名称)返回时,数据库管理器检测到返回的字节数多于分配给下列其中一项的字节数:

  • 结果值(基于例程定义)。 有几种可能的原因:
    • 太多字节移入了结果缓冲区。
    • 数据类型是数据值必须由空值定界的数据类型,如 VARCHAR(n),而定界的空值不在定义的大小范围内。
    • 数据库管理器期望在该值之前有长度为 2 字节或 4 字节的值,而此长度超过了定义的结果大小。
    • 例程返回一个 LOB 定位器,而与此定位器相关的 LOB 值的长度超过定义的结果大小。

    “例程”中结果自变量的定义必须符合对数据类型的需求。

  • SQLSTATE 值(包括 NULL 终止符在内为 6 字节)
  • 消息正文(包括 NULL 终止符在内 71 字节)。
  • 暂存区内容(在 CREATE FUNCTION 上声明的长度)。

这是不允许的。

如果例程改变了暂存区的长度字段,那么也将返回此错误。

咨询数据库管理员,或例程的程序设计者。

sqlcode:-450

sqlstate:39501

SQL0451N

在定义例程 routine-name 的语句中,数据项 定义包含一个数据类型 类型,该数据类型不适合用给定语言编写的非源代码例程或定义为自主例程。 在定义例程 例程名 的语句的 数据项 部分中产生了错误。 用户的语句包含了无效的类型 类型,或者包含了基于无效类型 类型 的用户定义的类型(UDT)。 例程定义可以是 CREATE FUNCTION、CREATE PROCEDURE、CREATE TYPE(方法定义)、或 ALTER TYPE(方法定义)。

数据项 是在语句中标识问题区的标记。 例如,“PARAMETER 2”或“RETURNS”或“CAST FROM”。

在自主事务中,可以落实该事务中的语句块,即使该事务被回滚亦如此。 您可以通过在 CREATE PROCEDURE 命令中使用 AUTONOMOUS 关键字来创建过程,该过程将落实它的工作,即使从被回滚的工作单元中调用该过程亦如此。

确定发生了何种情况并执行更正操作。 可能的更正操作包括:

  • 将例程定义更改为受支持的类型;例如,从 DECIMAL 更改为 FLOAT。 这可能涉及例程实体本身的更改,在使用此例程时还可能涉及强制类型转换函数的使用。
  • 创建新的(有适当基础的)用户定义的类型,或更改现有的 UDT 定义。

sqlcode:-451

sqlstate:42815

SQL0452N

不能访问主变量 变量位置 引用的文件。 原因码:原因码

尝试访问或访问“第 n 个”主变量引用的文件时遇到错误,其中 n = variable-position,原因是 reason-code 给出的原因。如果无法确定主机变量位置,那么 <variable-position> 设置为 0。 可能的原因码如下所示:

  • 01 – 文件名长度无效,或文件名和/或路径格式无效。
  • 02 – 文件选项无效。 它的值必须是下列值之一:
    SQL_FILE_READ
         -read from an existing file
    SQL_FILE_CREATE
         -create a new file for write
    SQL_FILE_OVERWRITE
         -overwrite an existing file.
          If the file does not exist,
          create the file.
    SQL_FILE_APPEND
         -append to an existing file.
          If the file does not exist,
          create the file.
    
  • 03 – 找不到该文件。
  • 04 – 为与现有文件同名的文件指定了 SQL_FILE_CREATE 选项。
  • 05 – 对该文件的访问被拒绝。 用户无权打开该文件。
  • 06 – 对该文件的访问被拒绝。 该文件正以不兼容的方式使用。 要写入的文件是以互斥方式打开的。
  • 07 – 写文件时磁盘已满。
  • 08 – 读文件时遇到意外的文件结束。
  • 09 – 访问文件时遇到介质错误。
  • 10 – 读文件时遇到不完整的或无效的多字节字符。
  • 11 – 将数据从文件代码页转换为应用程序的图形字符代码页时遇到错误。
 

对于原因码 01,更正文件名长度、文件名和/或路径。

对于原因码 02,指定有效的文件选项。

对于原因码 03,确保在尝试访问文件前指定的文件已存在。

对于原因码 04,如果文件不再是必需的,那么删除该文件,或指定当前不存在的文件名。

对于原因码 05,确保用户具有对文件的访问权(更正文件许可权)。

对于原因码 06,使用另一文件,或者,如果一定要访问该文件,可修改应用程序来确保文件不会被并发访问。

对于原因码 07,删除不必要的文件以释放磁盘空间,或者指定驻留在另一具有足够磁盘空间的驱动器/文件系统上的文件。 同时,确保未达到操作系统或用户文件大小限制。 如果应用程序代码页使用多字节编码方案,那么有可能只写入了最后一个字符的一部分,因此,确保文件仅包含全型的字符。

对于原因码 08,如果文件要用于输入,那么确保在文件全部读入以前不要对其进行修改。

对于原因码 09,更正文件所在的介质上的所有错误。

对于原因码 10,确保文件包含基于应用程序代码页的有效多字节字符,或者在与文件的内容相同的代码页下运行时提交请求。

对于原因码 11,确保已安装了文件的代码页(例如日文 EUC)和应用程序的图形代码页(例如 UCS-2)之间的字符转换支持。

sqlcode:-452

sqlstate:428A1

SQL0453N

在定义例程 例程名 的语句中的 RETURNS 子句发现有问题。 已标识对例程 例程名 的结果进行强制类型转换的问题。 CAST FROM 数据类型不能强制类型转换成 RETURN 数据类型,而应该是此类型。 请参阅 SQL Reference 以了解有关在数据类型之间进行强制类型转换的详细信息。 更改 RETURNS 或者 CAST FROM 子句,以使 CAST FROM 数据类型可强制类型转换成 RETURN 数据类型。

sqlcode:-453

sqlstate:42880

SQL0454N

例程 例程名称 的定义中提供的特征符与另外某个例程的特征符相匹配。 函数的特征符由函数名、为函数定义的参数数目和一个有序参数类型列表组成。

方法的特征符由方法名、方法的主题类型、对方法定义的参数数目以及有序的参数类型列表组成。

过程的特征符由过程名称及为该过程定义的参数数目(不考虑数据类型)组成。

在下列情况下可能会出现此状况:

  • 在模式、模块或复合 SQL(编译型)语句中已经有函数或过程 (例程名称) 与要创建的函数或过程具有相同的特征符。 如果您正在改变模块以对已定义的例程原型添加例程主体,那么表明该例程已经有例程主体定义。
  • 外部的复合 SQL(编译型)语句已经有过程 (例程名称) 与要声明的过程具有相同的名称。
  • 已经有一个主题类型的方法 (例程名称) 与要添加的方法规范或者要创建的方法主体具有相同的特征符。

无法处理该语句。

确定现有例程是否已经提供了期望的功能。 如果未提供,那么必需更改该例程的特征符; 例如,通过更改例程名称来进行更改。

如果您正在更改模块以便对某个已定义的例程原型添加例程主体,请检查特征符是否匹配或者是否还需要更改特征符,并确保例程名称和特定名称与已定义的例程原型的那些名称匹配。 如果需要更改现有模块例程的例程主体,请更改模块以删除该例程,然后更改模块以重新创建该例程并指定新的例程主体。

sqlcode:-454

sqlstate:42723

SQL0455N

在例程 例程名中,为 SPECIFIC 名提供的模式名 模式名-1 与例程的模式名 模式名-2 不匹配。 如果 SPECIFIC 名被指定为一个有着两部分的名称,那么 模式名-1 部分必须与 例程名 的 模式名-2 部分相同。 注意,例程名 的 模式名-2 部分 可能已直接指定,或者可能已将它缺省为语句的授权标识。 如果例程是一种方法,那么 模式名 是指该方法的主题类型的模式名。 更正语句,然后再次尝试。

sqlcode:-455

sqlstate:42882

SQL0456N

在例程 例程名 的定义中,SPECIFIC 名称 特定名称 已存在于模式或模块中。 用户已在例程 例程名 的定义中提供显式的 SPECIFIC 名称 特定名称,但是此名称已是模式或模块中某个函数、方法或过程的 SPECIFIC 名称。 选择新的 SPECIFIC 名称,然后再次尝试。

sqlcode:-456

sqlstate:42710

SQL0457N

函数、方法、用户定义的数据类型或结构化数据类型属性不能称为 名称,因为它是保留给系统使用的。

因为指定的名称是保留给系统使用的,所以不能创建用户定义的函数、方法、用户定义的数据类型或结构化数据类型。 不能用作函数名、单值类型名、结构化类型名或属性名的名称包括:

  "=","<",">",">=","<=",
  "&=","&>",,"&<",
  "!=","!>","!<","<>",
  SOME, ANY, ALL, NOT, AND, OR,
  BETWEEN, NULL, LIKE, EXISTS, IN,
  UNIQUE, OVERLAPS, SIMILAR, and MATCH.
为不是保留供系统使用的函数、方法、用户定义的数据类型或结构化数据类型属性选择名称。

sqlcode:-457

sqlstate:42939

SQL0458N

在按特征符来引用例程 例程名称 时,找不到匹配的例程。 在按特征符来引用函数、方法或存储过程 例程名称 时,找不到匹配的函数、方法或存储过程。

如果所使用的数据类型可以接受参数,那么类型参数是可选的。 例如,对于 CHAR(12),可以指定参数 (CHAR(12)) 或省略它 (CHAR())。如果您指定了该参数,那么 DBMS 将仅接受数据类型和数据类型参数的精确匹配。 如果省略了该参数,那么 DBMS 将只接受数据类型的匹配。 CHAR() 语法提供了一种方法来告诉 DBMS 在查找匹配函数时忽略数据类型参数。

还要注意,在 DROP FUNCTION/PROCEDURE、COMMENT ON FUNCTION/PROCEDURE 和 TRANSFER OWNERSHIP FUNCTION/PROCEDURE/METHOD 语句中,非限定引用是用语句授权标识限定的,这是可找到问题的模式。 在 CREATE 函数的 SOURCE 子句中,限定来自于当前路径。 在此情况下,在整个路径中没有匹配的函数。

函数不能以 COALESCE、DBPARTITIONNUM、GREATEST、HASHEDVALUE、LEAST、MAX (scalar)、MIN (scalar)、NULLIF、NVL、RID、RAISE_ERROR、TYPE_ID、TYPE_NAME、TYPE_SCHEMA 或 VALUE 内置函数作为源函数。

无法处理该语句。

可能的响应包括:

  • 更改路径来包括正确的模式。
  • 从数据类型规范中移除参数。
  • 使用 SPECIFIC 名来引用函数或过程而不是特征符。

sqlcode:-458

sqlstate:42883

SQL0461N

不能将数据类型为 源数据类型 的值 CAST 为类型 目标数据类型 语句包含 CAST,其第一个操作数具有数据类型 源数据类型,它将要强制类型转换为数据类型 目标数据类型。 不支持此强制类型转换。 更改源或目标的数据类型,以使强制类型转换受支持。 对于预定义数据类型,这些内容已在 SQL Reference 中归档。 对于涉及用户定义的单值类型的强制类型转换,强制类型转换可在基本数据类型与用户定义的单值类型之间进行,或者从可提升为基本数据类型的数据类型强制类型转换到用户定义的单值类型。

sqlcode:-461

sqlstate:42846

SQL0462W

命令或例程 命令或例程名称(特定名称 特定名称)返回了警告 SQLSTATE,其诊断文本为 文本 格式为 01Hxx 的 SQLSTATE 与消息正文 正文 一起由命令或例程 命令或例程名称(特定名称 特定名称)返回给 DB2。 如果 命令或例程名称 是一个命令,那么 特定名称 将包含值“*N”。 用户需要理解警告的含意。 咨询数据库管理员,或例程的程序设计者。

sqlcode: +462

sqlstate:由用户定义的函数、外部过程 CALL 或者命令调用返回的有效警告 SQLSTATE。

SQL0463N

例程 例程名(特定名称 特定名称)返回一个无效 SQLSTATE 状态,其诊断文本为 文本 例程可以返回的有效 SQLSTATE 是 38xxx(错误)、38502(错误)和 01Hxx(警告)。 此例程 例程名(特定名称 特定名称)返回一个无效 SQLSTATE 状态,以及消息正文 正文。 该例程存在错误。 将需要更正该例程。 咨询数据库管理员,或例程的程序设计者。 还可向例程的程序设计者了解错误 SQLSTATE 的应用程序意义。

sqlcode:-463

sqlstate:39001

SQL0464W

过程 过程名称 返回 生成的-nbr-结果 个查询结果集,它超出定义的限制 最大-nbr-结果 正常完成了由 过程名称 命名的存储过程。 但是,存储过程超出了该过程可返回的查询结果集数目上的定义限制。

生成的 nbr 结果
标识存储过程返回的查询结果集的数目。
最大 nbr 结果
标识存储过程的查询结果集的数目的定义限制。

只有第一个 最大-nbr-结果 查询结果集返回到发出 SQL CALL 语句的 SQL 程序中。

可能的原因如下所示:

  • 由于客户机强加了 DRDA 限制,因此存储过程无法返回 生成的-nbr-结果 个结果集。 DRDA 客户机用 MAXRSLCNT DDM 代码点建立此限制。
  • 从 C 应用程序调用了过程。 不支持对 C 应用程序处理结果集,因此,结果集在返回给 C 应用程序之前就关闭了。
SQL 语句成功。 将 SQLWARN9 字段设置为“Z”。

sqlcode:+464

sqlstate:0100E

SQL0465N

无法启动、初始化受防护方式的进程,也不能与它进行通信。 原因码: code 存在与系统有关的问题,它涉及到受防护方式例程(用户定义的函数或方法)的运行。 问题的确切性质由 代码 指示。 这不是用户问题。 可能的原因码是:

例程进程错误

21:
无法初始化内部数据或应用程序数据。
22:
无法注册信号处理程序。
23:
无法向代理进程授予 REQUEST QUEUE 的访问许可权。
24:
无法连接至例程进程“共享内存”。
25:
无法打开 REPLY QUEUE。
26:
无法写入 REPLY QUEUE。
27:
无法创建 REQUEST QUEUE。
28:
无法读 REQUEST QUEUE。
29:
例程进程中止。
30:
例程进程捕获到 USER INTERRUPT 信号。
31:
无法卸装例程模块。
32:
无法为在模块装入/卸装中使用的控制块分配存储器。
33:
无法将 SIGINT 从代理进程发送到例程进程。
34:
初始化 OLE 库失败。
35:
初始化“OLE 数据库初始化服务组件”失败。
40:
在例程进程中发生了内部错误。

代理进程错误

41:
无法衍生例程进程。
42:
无法创建 REPLY QUEUE。
43:
无法读 REPLY QUEUE。
44:
无法打开 REQUEST QUEUE。
45:
无法写入 REQUEST QUEUE。
47:
无法向例程进程授予对 UDFP 共享内存集的访问许可权。
48:
无法向例程进程授予对 REPLY QUEUE 的访问许可权。
49:
无法为在模块装入/卸装中使用的控制块分配存储器。
50:
代理进程在运行例程代码或代理程序代码时中止。
51:
代理进程在运行非防护例程代码时捕获到 USER INTERRUPT。
60:
在例程进程中发生了内部错误。
与数据库管理员或系统管理员联系。

sqlcode:-465

sqlstate:58032

SQL0466W

过程 过程名称 从存储过程返回 结果数目 个结果集。 此消息已作为发出 CALL SQL 语句的结果返回。 它指示存储过程 过程名称 有 结果数目 个结果集与它相关联。

该语句成功完成。

不需要执行任何操作。

sqlcode:+466

sqlstate:0100C

SQL0467W

过程 过程名称 包括另一个结果集。 总共有 最大-nbr-结果 个结果集。 此消息作为关闭游标的结果返回。 它指示存储过程 过程名称 存在另一个结果集并且在下一个结果集上重新打开了游标。 存储过程中总共有 最大-nbr-结果 个结果集。

该语句成功完成。

不需要执行任何操作。 可以继续对下一个结果集进行访存。

sqlcode:+467

sqlstate:0100D

SQL0469N

参数方式 OUT 或 INOUT 对于例程 例程名 中特定名为 特定名 的参数无效(参数号为 编号,名称为 参数名)。 SQL 过程中的某个参数被声明为 OUT 参数,但相应的自变量不是有效的赋值目标。 (仅限于函数)一个参数被声明为 OUT 或 INOUT 参数,但相应的自变量不是 SQL 变量、全局变量或 SQL 参数。

常量或表达式是 OUT 或 INOUT 参数的无效自变量的示例。

例如,如果将名为 my_function 的函数声明为具有一个 OUT 参数,那么以下函数调用无效,原因是不能对传递给 OUT 参数的自变量进行赋值:

SET my_variable = my_function( 1 + 2 );

如果正在调用 SQL 过程,请将该输出自变量更改为有效的赋值目标。 如果正在调用函数,请将 OUT 或 INOUT 自变量更改为 SQL 变量、全局变量或 SQL 参数。

sqlcode:-469

sqlstate:42886

SQL0470N

用户定义的例程 例程名(特定名称 特定名称)对于不能传送的自变量 自变量 具有空值。 例程具有带有空值的输入自变量,但该空值是用不传递空指示符的参数样式定义的,或此参数的数据类型不支持空值。 如果将通过空值调用例程,那么确保参数类型或输入类型能够接受空值。 对于函数,还可用“RETURNS NULL ON NULL INPUT”创建函数。

sqlcode:-470

sqlstate:39004

SQL0471N

调用例程 名称 失败,因为 原因码 对例程 名称 的调用失败。 使用原因码 原因码 来了解有关故障原因的更多详细信息。

如果原因码以“DSNX9”开头:

  • 在 DB2 通用数据库 z/OS 版服务器上调用了例程。 在该服务器的系统控制台上可能会显示用来描述错误的 DSNX9xx 消息。 参阅 DB2 UDB z/OS 版服务器的文档并更正原因码所描述的情况。

另外,下面列示了要针对所指示的原因码执行的操作:

1
因为对该产品的前发行版创建了 SQL 例程,而 DBMS 无法将它迁移到当前发行版,所以调用失败。 必须删除该例程然后重新创建它,以使它再次成为可运行的。

sqlcode:-471

sqlstate:55023

SQL0472N

函数或方法 例程名(特定名称 特定名称)将一个或多个游标保持为打开。 在调用语句完成之前,函数或方法 例程名(特定名称 特定名称)未关闭它的所有打开的游标。 函数和方法必须在调用语句完成前关闭所有游标。 咨询函数或方法的开发者。 必须重写函数或方法以确保在调用语句完成之前关闭所有游标。

sqlcode:-472

sqlstate:24517

SQL0473N

无法创建用户定义的数据类型,因为为新数据类型指定的名称与现有内置数据类型的名称相同。 当您正在尝试创建与内置数据类型同名的用户定义的数据类型,或者正在尝试对具有这种数据类型的数据库进行升级时,返回此消息。 如果要创建新的用户定义的数据类型,请使用非保留的数据类型名称重新发出此语句。

如果要升级的数据库具有与新的产品版本中的内置数据类型同名的用户定义的数据类型,请执行下列步骤:

  1. 删除名称冲突的用户定义的数据类型以及引用此类型的数据库对象。
  2. 使用非保留的数据类型名称重新创建数据类型,然后重新创建其他已删除的对象。
  3. 升级数据库。

sqlcode:-473

sqlstate:42918

SQL0475N

SOURCE 函数的结果类型(type-1)无法转换为用户定义函数 函数名 的 RETURNS 类型(type-2)。 为了使源用户定义的函数 (UDF) 的 CREATE 有效,源函数的结果类型(类型-1)必须可通过强制类型转换为正在创建函数的 RETURNS 类型(类型-2)。 不支持在这些数据类型之间进行强制类型转换。 请参阅 SQL Reference 以了解有关在数据类型之间进行强制类型转换的详细信息。 更改 RETRUNS 数据类型或 SOURCE 函数标识,以使 SOURSE 函数的结果类型可通过强制类型转换为 RETURNS 数据类型。

sqlcode:-475

sqlstate:42866

SQL0476N

在无特征符的情况下引用了例程 函数名,但该例程在其模式中不是唯一的。 允许不带特征符的函数或存储过程引用,但指定的函数或存储过程 函数名 在其模式中必须是唯一的,而实际上不是。 如果例程是方法,那么允许不带特征符的引用,但是此指定方法对于数据类型必须是唯一的。

注意,在 DROP FUNCTION/PROCEDURE 和 COMMENT ON FUNCTION/PROCEDURE 语句中,非限定引用是用语句授权标识限定的,这是可找到问题的模式。 在 CREATE 函数的 SOURCE 子句中,限定来自于当前路径。 在此情况下,路径中包含具有此名的函数的第一个模式有同名的其他函数。

联合系统用户:对于传递会话,如果语句为 CREATE FUNCTION MAPPING 语句,那么此错误指示尝试创建从一个远程函数到多个本地函数的函数映射。

通过下列其中一项更正引用:

  • 完成特征符
  • 使用期望的例程的 SPECIFIC 名
  • 更改 SQL 路径

然后,再次尝试。

sqlcode:-476

sqlstate:42725

SQL0478N

由于存在对目标对象的一个或多个依赖关系,因此语句失败。 目标对象类型:对象类型-1。 依赖于目标对象的对象的名称:对象名。 依赖于目标对象的对象的类型:对象类型-2 当对象 B 被认为依赖于对象 A 时,对对象 A 执行的操作可能会显著地影响对象 B。 例如,当您删除表时,任何直接或间接依赖该表的对象都可能被删除或使其不可用。 由于可能会对从属对象产生这些结果,因此存在对作为操作目标的对象的依赖关系时,某些类型的操作将失败。

由于存在直接或间接依赖于目标对象的其他对象而导致尝试针对该目标对象执行删除、更改、移交所有权或撤销特权失败时,将返回此消息。

下面是一些有可能导致返回此消息的场景示例:

  • 如果 对象类型-1 为 ALIAS,那么 DROP 的依赖项可以包括行许可权或者引用此别名的列掩码。
  • 如果 对象类型-1 为 SYNONYM,那么 DROP 的依赖项可以包括行许可权或者引用此同义词的列掩码。
  • 如果 对象类型-1 为 VIEW,那么 DROP 的依赖项可以包括行许可权或者引用此视图的列掩码。
  • 如果 对象类型-1 为 TABLE:
    • DROP 的依赖项可能包括行许可权或者引用了此表的列掩码。
    • 可能存在使用此表作为相应历史记录表的系统时间段时间表。
    • 如果 对象类型-2 为 INDEX,那么可能存在依赖于表列的基于表达式的索引。
  • 如果 对象类型-1 为 TABLESPACE,那么可能存在相应历史记录表位于此表空间的系统时间段时间表。
  • 如果 对象类型-1 为 TENANT:
    • 那么类型 对象类型-2 的名为 对象名称 的对象存在于租户目录中。
  • 对于 DB2 for z/OS 服务器,如果 对象类型-1 为 DATABASE,那么可能存在相应历史记录表位于此数据库的系统时间段时间表。
  1. 通过使用下面这两种方法中的一种或两种,确定哪些对象直接或间接依赖于目标对象:
    • 查询系统目录。
    • 使用 GET_DEPENDENCY 过程。
  2. 移除导致此语句失败的依赖关系。
  3. 请重新发出此语句。

sqlcode:-478

sqlstate:42893

SQL0480N

尚未调用过程 过程名称 在应用程序进程中尚未调用在 ASSOCIATE LOCATORS 语句中标识的过程,或者虽然调用了该过程,但是在该语句之前发生了显式或隐式落实。 更正这些语句,以便使用来在 CALL 语句上指定过程名称的准确语法与在 ASSOCIATE LOCATORS 语句上指定过程名称的语法相同。 如果使用了非限定名来调用(CALL)该过程,那么在其他语句中还必须使用只具单一部分的名称。 重新发出这些语句。

sqlcode:-0480

sqlstate:51030

SQL0481N

GROUP BY 子句包含嵌套在 element-1 中的 element-2 。

在 GROUP BY 子句中不允许下列嵌套类型:

  • CUBE 嵌套在 CUBE、ROLLUP 或 GEL 之中
  • ROLLUP 嵌套在 CUBE、ROLLUP 或 GEL 之中
  • () 嵌套在 CUBE、ROLLUP 或 GEL 之中
  • GROUPING SETS 嵌套在 GROUPING SETS、CUBE、ROLLUP 或 GEL 之中
  • CUBE、ROLLUP、()、GROUPING SETS 嵌套在任何函数、CASE 表达式或 CAST 规范中

其中,GEL 表示在 GROUP BY 子句的语法图中显示为分组表达式列表的元素。

在某些情况下,元素 2 将显示值“—”。 在此情况下,“—”表示 CUBE、ROLLUP、GROUPING SETS 或 GEL 中的一个。

无法处理该语句。

修改 GROUP BY 子句以移除嵌套。

sqlcode:-481

sqlstate:428B0

SQL0483N

在用户定义的函数 函数名 语句的 CREATE 中,参数的数目与 SOURCE 函数的参数个数不匹配。

正尝试 CREATE 用户定义的函数 函数名,它源于另一个函数。 已经标识了下列情况之一:

  • SOURCE 子句使用函数名(输入参数列表)来标识源函数,而列表中类型的数目与正创建的函数的参数个数不同。
  • SOURCE 子句使用不同的语法来标识源函数,而该函数的类型数目与正创建的函数的参数个数不同。

SOURCE 函数的参数个数与正创建的函数的参数个数必须是相同的。 SOURCE 函数的标识需要更改,以

  • 修正输入参数列表
  • 更正函数名或函数特定名来标识正确的函数。

还可能需要更正路径以便进行正确的函数解析。

sqlcode:-483

sqlstate:42885

SQL0486N

BINARY 和 VARBINARY 数据类型当前仅在内部受支持。 语句中的一个或多个数据类型为 BINARY 或 VARBINARY。 当前版本的 DB2 不支持这种情况。 更改数据类型,然后重新提交该语句。

sqlcode:-486

sqlstate:42991

SQL0487N

例程 例程名(特定名称 特定名称)尝试执行 SQL 语句。 不允许用来实现例程实体的程序执行 SQL 语句。 此例程 例程名称(特定名称 特定名称包含 SQL 语句或此例程调用一个使用 SQL 的过程,例如 SYSPROC.ADMIN_CMD 过程。 移除任何 SQL 语句,然后重新编译该程序。 审计所允许的 SQL 的级别,如在定义例程的语句上所指定的那样。

sqlcode:-487

sqlstate:38001

SQL0489N

在 SELECT 或 VALUES 列表项中的函数 函数名 生成了 BOOLEAN 结果。 函数 函数名 定义为用作谓词,返回布尔结果。 这样的结果在选择列表中无效。

无法处理该语句。

更正函数名或移除函数的使用。

sqlcode:-489

sqlstate:42844

SQL0490N

在 SQL 语句或命令中直接指定的数值 数值 在此上下文(最小值最大值)中允许值的范围之外。 指定了数值(数值),但是该数字在指定它的上下文中是无效的。 此上下文中允许的最小值为 最小值。 此上下文中允许的最大值为 maxval。 n 必须在 minval 和 maxval 所指定的范围内 (minval =< n => maxval)。

如果创建或改变表空间,最小值和最大值可能取决于表空间的页大小。 请参阅 SQL Reference 以了解有关表空间限制的详细信息。

将语句或命令中的值 n 更改为有效值。

sqlcode:-490

sqlstate:428B7

SQL0491N

用于定义 例程名 的 CREATE FUNCTION 或 ALTER MODULE 语句必须包含 RETURNS 子句以及下列其中一项:EXTERNAL 子句(带有其他必需关键字)、SQL 函数体或 SOURCE 子句。 在例程 例程名 的定义中缺少了必需的子句。 如果指定了 EXTERNAL,那么还必须指定 LANGUAGE 或 PARAMETER STYLE 子句。

如果正在定义 SQL 函数,那么除非正在使用 ALTER MODULE 的 PUBLISH 操作来定义 SQL 函数原型,否则必须包括 SQL 函数体。

添加缺少的子句,然后再次尝试。

sqlcode:-491

sqlstate:42601

SQL0492N

用户定义的函数 函数名 的 CREATE 中有问题,参数号为 号码。 可能涉及与 SOURCE 函数不匹配。 函数 函数名 的位置 编号 中的参数出错,并且不能执行 CREATE。 源函数位置 编号 中的参数不能通过强制类型转换为正在创建的函数的相应参数。

可能的更正包括:

  • 标识不同的源函数。
  • 更改正创建的函数的参数数据类型,以使源函数的数据类型可通过强制类型转换为此数据类型。

sqlcode:-492

sqlstate:42879

SQL0493N

例程 例程名(特定名称 特定名称)返回了一个在语法或数字上无效的日期、时间或时间戳记值。 用户定义的函数 (UDF) 或方法 例程名(特定名称 特定名称)的主体返回了无效日期、时间或时间戳记值。

语法上无效日期值的示例为“1994-12*25”:“*”应为“-”。数字上无效时间值的示例为“11.71.22”:一小时内没有第 71 分钟。

需要修正该例程。 咨询 DBA 或例程的程序设计者。

sqlcode:-493

sqlstate:22007

SQL0494W

结果集数大于定位器数。 在 ASSOCIATE LOCATORS 语句中指定的结果集定位器数小于存储过程返回的结果集数。 返回了前 “n” 个结果集定位器值,其中 “n” 是 SQL 语句中指定的结果集定位器变量的数。

SQL 语句成功。 SQLWARN3 字段设置为“Z”。

增大在 SQL 语句中指定的结果集定位器变量数。

sqlcode:+494

sqlstate:01614

SQL0495N

成本类别 费用类别 中 estimate-amount1 处理器秒数(estimate-amount2 服务单位)的估计处理器成本超过 限额 服务单位的资源限制错误阈值。  

动态 INSERT、UPDATE、DELETE 或 SELECT SQL 语句的预编译所得出的成本估计值超出了在资源限制规范表(RLST)中指定的错误阈值。

如果成本类别值为“B”,并且在 RLST 的 RLF_CATEGORY_B 列中所指定的缺省操作是返回错误,那么也会返回此错误。

estimate_amount1
如果要执行已预编译好的 INSERT、UPDATE、DELETE 或 SELECT 语句时的成本估计(以处理器秒计)。
estimate_amount2
执行预编译的 INSERT、UPDATE、DELETE 或 SELECT 语句时的成本估计(以服务单元计)。
cost-category
此 SQL 语句的成本类别。 可能值是 A 或 B。
limit-amount
在该 RLST 的 RLFASUERR 列中指定的错误阈值(以服务单元数计)。

动态 INSERT、UPDATE、DELETE 或 SELECT 语句的预编译未成功。

如果因为成本类别值为“B”而返回了此 SQLCODE,那么原因可能是语句正在使用参数标记,或某些统计信息对于所引用的表和列不可用。 请确保管理员已经对所引用的表运行了 RUNSTATS 命令(对于 Db2 表)、NNSTAT 过程(对于昵称)或者 ANALYZE 命令(对于 Hadoop 和 HBase 表)。 还可能是因为执行语句时将调用 UDF,或者对于 INSERT、UPDATE 或 DELETE 语句,对已更改的表定义了触发器。 检查此语句的 DSN_STATEMNT_TABLE 或 IFCID 22 记录,以便找到此 SQL 语句被置于成本类别“B”中的原因。 如果无法更改该程序,或者如果无法获得统计信息,那么请求管理员将 RLST 的 RLF_CATEGORY_B 列中的值更改为“Y”(这允许执行该语句),或者更改为“W”(这将返回警告,而不是返回错误)。

如果警告是由消耗了太多处理器资源的 SQL 语句引起的,那么尝试重写该语句以便更有效地执行该语句。 另一个选择是请求管理员来增大 RLST 中的错误阈值。

sqlcode:-495

sqlstate:57051

SQL0499N

游标 游标名 已分配给过程 过程名称 中的这个或另一个结果集。 尝试将游标分配给一个结果集,但已为过程 过程名称 分配多个游标。 确定是否先前对游标分配了目标结果集。 如果已为过程 过程名称 分配了多个游标,那么确保仅使用一个游标来处理存储过程的结果集。

sqlcode:-499

sqlstate:24516

SQL0501N

FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。 程序尝试执行下列其中一项操作:

  • 当指定的游标未打开时,尝试使用该游标进行访存(FETCH)。
  • 当指定的游标未打开时,尝试关闭(CLOSE)该游标。
  • 在 OPEN 语句中引用游标变量,但该游标变量尚未打开。
  • 引用游标标量函数(例如 CURSOR_ROWCOUNT 函数),但该游标变量尚未打开。

无法处理该语句。

检查先前的消息 (SQLCODE),它可能关闭了游标。 注意,在关闭游标后,任何访存或关闭游标语句都接收到 SQLCODE -501。

如果未发出任何先前的 SQLCODE,那么更正应用程序,确保游标在执行 FETCH 或 CLOSE 语句时是打开的。

如果在游标标量函数中引用游标变量,请验证该游标是否不为空、已定义并且已打开,否则将该游标变量替换为处于该状态的游标变量。

sqlcode:-501

sqlstate:24501

SQL0502N

在 OPEN 语句中指定的游标已打开。 程序已尝试对打开的游标执行 OPEN 语句。

无法处理该语句。 游标未更改。

更正应用程序,确保其没有尝试对已打开的游标执行 OPEN 语句。

sqlcode:-502

sqlstate:24502

SQL0503N

不能更新列,因为未在游标的 SELECT 语句的 FOR UPDATE 子句中对其进行标识。 程序尝试使用游标更新表列中的值,该列未在游标声明或预编译的 SELECT 语句的 FOR UPDATE 子句中标识。

任何欲更新的列必须在游标声明的 FOR UPDATE 子句中标识。

无法处理该语句。

更正应用程序。 如列需要更新,可将其名称添加到游标声明的 FOR UPDATE 子句中。

sqlcode:-503

sqlstate:42912

SQL0504N

游标 名称 未定义。 指定了 UPDATE 或 DELETE WHERE CURRENT OF 名称,但游标 名称 未在应用程序中声明。

无法处理该语句。

确保应用程序的完整性并更正游标名的拼写错误。

sqlcode:-504

sqlstate:34000

SQL0505N

游标 名称 已定义。 已声明 DECLARE 语句中指定的游标名。

无法处理该语句。

确保正确拼定名称。

SQL0507N

在 UPDATE 或 DELETE 语句中指定的游标未打开。 当指定的游标未打开时,程序尝试执行 UPDATE 或 DELETE WHERE CURRENT OF 游标语句。

无法处理该语句。 未执行任何更新或删除。

检查先前的消息 (SQLCODE),它可能关闭了游标。 注意,在关闭游标后,任何访存或关闭游标语句接收到 SQLCODE -501,且任何更新或删除接收到 SQLCODE -507。 更正应用程序的逻辑,确保在执行 UPDATE 或 DELETE 语句时指定的游标打开。

sqlcode:-507

sqlstate:24501

SQL0508N

在 UPDATE 或 DELETE 语句中指定的游标未定位在行上。 当指定的游标未定位在对象表行上时,程序尝试执行 UPDATE 或 DELETE WHERE CURRENT OF 游标语句。 游标必须定位在要更新或删除的行上。

如果删除了某一行,那么游标不再定位于该行上。 这包括执行 ROLLBACK TO SAVEPOINT 时在保存点内的任何游标使用。

联合系统用户:远程数据源中的记录已被另一应用程序(或此应用程序中的另一游标)更新和/或删除,该记录不再存在。

无法处理该语句。 未更新或删除任何数据。

更正应用程序的逻辑,确保游标在执行 UPDATE 或 DELETE 语句之前正确定位在对象表的欲处理行上。 注意,如果 FETCH 返回消息 SQL0100W (SQLCODE = 100),那么表示游标不再定位在某行上。

sqlcode:-508

sqlstate:24504

SQL0509N

在 UPDATE 或 DELETE 语句中指定的表与在游标的 SELECT 中指定的表不相同。 程序尝试执行 UPDATE 或 DELETE WHERE CURRENT OF 游标语句,而在该语句中所指定的表与在声明游标的 SELECT 语句中指定的表名不匹配。

无法处理该语句。

更正应用程序,确保在 UPDATE 或 DELETE 语句中标识的表与在游标声明中标识的表相同。

sqlcode:-509

sqlstate:42827

SQL0510N

对指定的游标不允许执行 UPDATE 或 DELETE。 程序尝试对表或视图定义执行 UPDATE 或 DELETE WHERE CURRENT OF 游标语句,而该表或视图定义不允许请求的更新或删除操作。 例如,此错误会发生在自只读视图的删除或在未用 FOR UPDATE 子句定义游标的更新中。

在数据库管理器上,如果 SELECT 语句包括下列内容,那么视图是只读的:

  • DISTINCT 关键字
  • SELECT 列表中的列函数
  • GROUP BY 或 HAVING 子句
  • 标识下列其中一项的 FROM 子句:
    • 多个表或视图
    • 只读视图(SYSCAT.SYSVIEWS 的 READONLY 列设置成“Y”)
  • 集合运算符(除 UNION ALL 之外)。

注意,这些条件不适用于 SELECT 语句的子查询。

游标是用 FOR FETCH ONLY 子句声明的。

游标不明确且指定了 BLOCKING ALL 绑定选项。

游标引用具有 INSTEAD OF UPDATE(或 DELETE)触发器的视图。

游标直接或间接引用了使用 WITH ROW MOVEMENT 子句定义的视图并且尝试了 UPDATE WHERE CURRENT OF CURSOR。

无法处理该语句。

如果数据库管理器使该语句失败,且游标基于只读的 SELECT 或 VALUES 语句,那么不要对它发出任何更新或删除语句。

如果数据库管理器使语句失败,而且游标不基于只读的 SELECT 或 VALUES 语句,而且该游标是用 FOR FETCH ONLY 子句定义的,那么从游标定义中移除此子句,或者不发出任何更新或删除语句。

如果数据库管理器使语句失败,并且不能确定游标是否是仅访存的或可从它的定义或上下文更新的,那么将程序与 BLOCKING NO 或 BLOCKING UNAMBIG 绑定选项重新绑定。

如果数据库管理器使语句失败,且游标基于具有 INSTEAD OF UPDATE(或 DELETE)触发器的视图,那么使用搜索到的 UPDATE(或 DELETE)语句。

如果数据库管理器使该语句失败,且游标直接或间接引用了使用 WITH ROW MOVEMENT 子句定义的视图,那么不要对它发出任何更新语句。

联合系统用户:找出导致请求失败的数据源中的问题。 如果数据源使该请求失败,那么检查该数据源的限制以确定问题原因及其解决方案。 如果存在对数据源的限制,请参阅该数据源的 SQL Reference 手册,以确定该对象不可更新的原因。

sqlcode:-510

sqlstate:42828

SQL0511N

不允许 FOR UPDATE 子句,因为由游标指定的表不可修改。 不能更新 SELECT 或 VALUES 语句的结果表。

在数据库管理器上,如果游标基于 VALUES 语句或包含下列任一项的 SELECT 语句,那么结果表是只读的:

  • DISTINCT 关键字
  • SELECT 列表中的列函数
  • GROUP BY 或 HAVING 子句
  • 标识下列其中一项的 FROM 子句:
    • 多个表或视图
    • 只读视图
    • 带有类型表或带类型视图的 OUTER 子句
    • 数据更改语句
  • 集合运算符(除 UNION ALL 之外)。

注意,这些条件不适用于 SELECT 语句的子查询。

无法处理该语句。

不要对指定的结果表执行更新。

联合系统用户:找出导致请求失败的数据源中的问题。

如果数据源使该请求失败,那么检查该数据源的限制以确定问题原因及其解决方案。

如果存在对数据源的限制,请参阅该数据源的 SQL Reference 手册,以确定该对象不可更新的原因。

sqlcode:-511

sqlstate:42829

SQL0512N

由于以不受支持的方式使用了联合三部分名称,因此语句或命令失败。 三部分名称:名称。 原因码:原因码 通过使用联合三部分名称直接引用远程对象,不必使用昵称就可以引用远程对象。

当语句以不受支持的方式使用三部分名称时,将返回此消息。 原因码指示了遇到的限制:

1
尝试将三部分名称与导入实用程序或导出实用程序配合使用。
2
尝试对分区数据库发出一个 SQL 语句,但是在该语句中,将三部分名称与 CREATE ALIAS 子句配合使用。
3
尝试在不支持三部分名称的 SQL 语句类型中使用三部分名称。
4
尝试对不支持三部分名称的数据源使用三部分名称。
请查看联合三部分名称限制,然后修改此语句或命令,使其仅以受支持的方式使用三部分名称。

sqlcode:-512

sqlstate:56023

SQL0513W

SQL 语句将修改整个表或视图。 UPDATE 或 DELETE 语句不包含 WHERE 子句,因而如果执行了此语句,那么会修改该表或视图的所有行。

该语句被接受。

联合系统用户:并非所有数据源都会报告此警告情况。 只要存在该情况,联合服务器都会尝试发出此警告,但不保证联合服务器总可以检测到此情况。 不要依靠此警告来避免 UPDATE/DELETE 操作影响整个表或视图。

确保预期修改的是整个表或视图。

sqlcode:+513

sqlstate:01504

SQL0514N

游标 名称 不处于预编译状态。 应用程序尝试使用不处于已预编译状态的游标。 此游标与满足下列条件的语句相关联:

  1. 从未预编译
  2. 由于显式或隐式重新绑定程序包而变得无效的语句
  3. 在先前的事务中进行了预编译,并且已使用 KEEPDYNAMIC NO 绑定了应用程序的程序包

无法处理该语句。

  1. 在尝试打开游标之前,预编译在 DECLARE CURSOR 语句中所指定的语句。
  2. 必须重新发出预编译游标的命令。
  3. 在执行 COMMIT 或 ROLLBACK 之后应当再次预编译此语句。 或者,使用 KEEPDYNAMIC YES 来绑定程序包,或者使用 ALTER PACKAGE 语句将 KEEPDYNAMIC 属性更改为 YES。

sqlcode:-514

sqlstate:26501

SQL0516N

DESCRIBE 语句未指定预编译语句。 在 DESCRIBE 语句中的语句名必须指定在同一数据库事务中预编译的语句。

无法处理该语句。

验证语句名是否指定了已预编译的语句。

sqlcode:-516

sqlstate:26501

SQL0517N

游标 名称 标识一个并非 SELECT 或 VALUES 语句的预编译语句。 因为游标声明中指定的预编译语句不是 SELECT 或 VALUES 语句,所以游标 名称 无法像指定的那样使用。

无法处理该语句。

验证是否在 PREPARE 和 DECLARE CURSOR 中为游标 名称 语句正确指定了语句名。 或者更正程序,以确保仅将预编译的 SELECT 或 VALUES 语句与游标声明配合使用。

sqlcode:-517

sqlstate:07005

SQL0518N

EXECUTE 语句中指定的语句未处于预编译状态,或者它是 SELECT 或 VALUES 语句。 应用程序尝试执行满足下列条件的语句:

  1. 从未预编译;
  2. 是一个 SELECT 或 VALUES 语句;
  3. 由于显式或隐式重新绑定程序包而变得无效的语句;或者
  4. 在先前的事务中进行了预编译,并且已使用 KEEPDYNAMIC NO 绑定了应用程序的程序包。

无法处理该语句。

  1. 在尝试 EXECUTE 之前预编译此语句。
  2. 请确保此语句不是 SELECT 或 VALUES 语句。
  3. 必须重新发出预编译游标的命令。
  4. 在执行 COMMIT 或 ROLLBACK 之后应当再次预编译此语句。 或者,使用 KEEPDYNAMIC YES 来绑定程序包,或者使用 ALTER PACKAGE 语句将 KEEPDYNAMIC 属性更改为 YES。

sqlcode:-518

sqlstate:07003

SQL0519N

PREPARE 语句标识打开的游标 名称 的 SELECT 或 VALUES 语句。 当游标已打开时,应用程序尝试为指定的游标预编译 SELECT 或 VALUES 语句。

不能预编译该语句。 游标未受影响。

更正应用程序,以便它不尝试为打开的游标预编译 SELECT 或 VALUES 语句。

sqlcode:-519

sqlstate:24506

SQL0525N

因为该 SQL 语句在节 = 节号 程序包 = 程序包模式.程序包名 一致性标记 = X一致性标记 的绑定时间出错,所以无法执行该语句。

下列其中一项:

  • 当绑定程序包时语句出错,但因使用了选项 SQLERROR(CONTINUE),所以该错误被忽略。 因为该语句包含错误,所以不能执行。
  • 该语句在此位置可能不是可执行语句,或者仅可由 DB2 应用程序请求器执行。

注意 一致性标记 是以十六进制给出的。

无法执行该语句。

如果 SQL 语句不应在指示的位置执行,那么更正该程序,以使出错的语句不在该位置执行。 预编译、编译和绑定替换程序包。 如果 SQL 语句应在指示的位置执行,那么更正发现的问题,并使用 ACTION(REPLACE) 重新发出 PREP 或 BIND。 如果发现了多个版本的程序包,那么发出下列 SELECT 语句以确定哪个版本有错误:SELECT PKGVERSION FROM SYSCAT.PACKAGES where PKGSCHEMA=’pkgschema’ AND PKGNAME = ‘pkgname’ and HEX(UNIQUE_ID) = ‘contoken’

sqlcode:-525

sqlstate:51015

SQL0526N

由于此语句引用了已创建的临时表或已声明的临时表,并包含不可用于临时表的功能,因此未处理此语句。 您可以将数据处理结果暂时存储在临时表中。

在临时表的使用方式方面,存在一些限制。 例如,临时表不支持用户定义的类型列,并且不能对临时表启用索引压缩。 在尝试执行以不受支持的方式使用临时表的 SQL 语句时,将返回此消息。

通过下列其中一种方式对此消息作出响应:

  • 修改此 SQL 语句,以移除对已创建或已声明的临时表的引用。
  • 修改此 SQL 语句,以移除临时表所不支持的功能。

sqlcode:-526

sqlstate:42995

SQL0528N

表或昵称 表名或昵称名 已有一个唯一约束,该唯一约束是约束 名称 的重复。 UNIQUE 子句与对于表 表名 已存在的 PRIMARY KEY 子句、另一 UNIQUE 子句、PRIMARY KEY 或 UNIQUE 约束使用同一列列表。 不允许重复的唯一约束。

名称 是约束名(如果约束已指定或存在)。 如果未指定约束名,那么 名称 是 UNIQUE 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

移除重复的 UNIQUE 子句,或将列列表更改为已不是唯一约束一部分的列集合。

sqlcode:-528

sqlstate:42891

SQL0530N

FOREIGN KEY 约束名 的插入或更新值不等于父表的任何父键值。 正在设置对象表的外键中的值,但此值不等于父表的任何父键值。

在将一行插入从属表时,外键的插入值必须等于关联关系的父表的任何行的某些父键值。

类似地,更新外键的值时,外键的更新值必须等于该语句完成时关联关系的父表的任何一行的父键值。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 约束名 提供适当的值。 在这些情况下,消息标记将具有以下格式:“<data source>:UNKNOWN”,指示指定数据源的实际值未知。

无法执行该语句。 对象表的内容未更改。

首先检查外键的插入或更新值,然后将该值与父表的每一个父键值作比较,以确定并更正问题。

sqlcode:-530

sqlstate:23503

SQL0531N

不能更新关系 约束名 的父行中的父键。 某项操作尝试更新父表行中的父键,但在 约束名 约束中,指定行中的父键在从属表中有与其相关联的从属行。

当约束 约束名 的更新规则为 NO ACTION 时,如果父行在语句完成时有任何从属行,那么不能更新父行中父键的值。

当约束 约束名 的更新规则是 RESTRICT 时,如果在尝试更新父键时父行有任何从属行,那么不能更新父行中父键的值。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 约束名 提供适当的值。 在这些情况下,消息标记将具有以下格式:“<data source>:UNKNOWN”,指示指定数据源的实际值未知。

无法执行该语句。 父表的内容未更改。

检查对象表的父键和从属表的外键,以确定是否应该更改父键的指定行的值。 如果这未显示问题,那么检查对象表和从属表的内容来确定并更正问题。

sqlcode:-531

sqlstate:23001, 23504

SQL0532N

因为关系 约束名 限制删除,所以不能删除父行。 某项操作尝试删除父表的指定行,但指定行中的父键在引用约束 约束名 中有从属行,并且已为关系指定了 NO ACTION 或 RESTRICT 删除规则。

当约束 约束名 的删除规则为 NO ACTION 时,如果从属行在语句完成时仍依赖于父键,那么不能删除父表的行。

当约束 约束名 的删除规则为 RESTRICT 时,如果父行在删除时有任何从属行,那么不能删除父表的行。

注意,删除可以级联以删除有 NO ACTION 或 RESTRICT 删除规则的从属表中的其他行。 因此,约束 约束名 可以在与原始删除操作不同的表上。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 约束名 提供适当的值。 在这些情况下,适当的字段包含一些值(如 “unknown”),指示实际值未知。

无法执行该语句。 表的内容未更改。

检查所有派生表的删除规则以确定并更正问题。 涉及的特定表可根据关系 约束名 确定。

sqlcode:-532

sqlstate:23001, 23504

SQL0533N

因为关系将全查询的结果限制为一行,所以 INSERT 语句无效。 带有全查询的 INSERT 操作尝试将多行插入到在引用约束的相同关系中作为父代和从属项的表中。

INSERT 操作的全查询应返回不超过一行的数据。

无法执行 INSERT 语句。 对象表的内容未更改。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

检查全查询的搜索条件,以确保选择不超过一行数据。

sqlcode:-533

sqlstate:21501

SQL0534N

无效的多行更新。 UPDATE 操作尝试执行包括在主键或唯一索引中的列的多行更新。

不支持主键或唯一索引的列的多行更新。

无法执行UPDATE语句。 表的内容未更改。

联合系统用户:该约束可存在于联合服务器上(如果子表和父表作为联合服务器上的表存在),也可存在于数据源上(如果子表和父表存在于该数据源上)。

确保 UPDATE 语句的搜索条件仅选择了一个对象表行来更新。

sqlcode:-534

sqlstate:21502

SQL0535N

DELETE 语句是无效的,因为自引用关系限制仅可删除一行。 带有 WHERE 子句的 DELETE 操作尝试从在带有 RESTRICT 或 SET NULL 删除规则的引用约束的同一关系中作为父代和从属项的表中删除多行。

DELETE 操作的 WHERE 子句应只选择不超过一行的数据。

无法执行 DELETE 语句。 对象表的内容未更改。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

检查 WHERE 子句搜索条件,以确保选择不超过一行数据。

注意:这只是早于版本 2 的 DB2 发行版中的限制。

sqlcode:-535

sqlstate:21504

SQL0536N

DELETE 语句是无效的,因为表 名称 会受到该操作的影响。 对在子查询中引用的所指示的表尝试了 DELETE 操作。

在 DELETE 语句的子查询中引用的所指示的表可能受到影响,因为它是:

  • 带有 CASCADE 或 SET NULL 删除规则的关系中的 DELETE 对象表的从属表。
  • 带有 CASCADE 或 SET NULL 删除规则的关系中的另一表的从属表,并且 DELETE 对象表的删除可级联至该表。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 名称 提供适当的值。 在这些情况下,适当的字段包含一些值(如 “unknown”),指示实际值未知。

无法处理该语句。

当表可能受 DELETE 语句影响时,不要在 DELETE 语句子查询中引用该表。

注意:此错误仅适用于版本 2 之前的 DB2 发行版,以及通过 DB2 Connect 访问的主机。

sqlcode:-536

sqlstate:42914

SQL0537N

键列列表多次标识了 列名 列。 列名 列在键列列表中多次出现。 键列列表可能多次出现在 CREATE 或 ALTER 语句的 PRIMARY KEY 子句、FOREIGN KEY 子句、UNIQUE 子句、DISTRIBUTE BY 子句、ORGANIZE BY 子句或 PARTITION BY 子句中或者作为函数依赖性。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 列名 提供适当的值。 在这些情况下,适当的字段包含一些值(如 “unknown”),指示实际值未知。

无法处理该语句。

移除重复的列名。

sqlcode:-537

sqlstate:42709

SQL0538N

FOREIGN KEY 名称 不符合表或昵称 表名或昵称名 的父键的描述。 所指示的外键的定义不符合表或昵称 表名或昵称名 的父键描述。

原因可能是:

  • 外键列列表中的列数与父键列列表中的列数不匹配。
  • 外键列列表中的列数与父表或父昵称的主键中的列数不匹配(未指定父键列列表)。
  • 相应列的描述不兼容。 如果对应列具有兼容的数据类型(两个列都是数字、字符串、图形、日期/时间或者都有相同的单值类型),那么列描述是兼容的。
  • REFERENCES 子句中的列名列表不能引用使用 BUSINESS_TIME WITHOUT OVERLAPS 定义的父键。

当在 FOREIGN KEY 子句中指定时,名称 是约束名。 如果未指定约束名,那么 名称 是该子句中指定的第一个列名,后跟三个句点。

联合系统用户应注意:某些数据源未向 名称 和 表名或昵称名 提供适当的值。 在这些情况下,相应的字段中包含一些值(例如,“未知”)用于指示未知实际值。

约束可存在于数据源上(如果子表和父表存在于该数据源上)。

无法处理该语句。

更正该语句,以使外键描述与父键描述一致。

sqlcode:-538

sqlstate:42830

SQL0539N

表或昵称 名称 没有 键类型 键。

发生了下列情况之一:

  • 在 FOREIGN KEY 子句中将表或昵称 名称 指定为父表或父昵称,但未将该表或昵称定义为父表或父昵称,因为它没有主键。
  • ALTER TABLE 语句尝试创建表 名称 的 FOREIGN KEY,但是该表或昵称没有主键。
  • ALTER TABLE 语句尝试删除表 名称 的主键,但该表没有主键。
  • ALTER TABLE 语句尝试删除表 名称 的分区键,但该表没有分区键。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 名称 和 键类型 提供适当的值。 在这些情况下,适当的字段包含一些值(如 “unknown”),指示实际值未知。

无法处理该语句。 在引用约束中不能将系统目录定义为父代。

创建引用约束时,在指定任何外键 (约束) 之前指定主键。

sqlcode:-539

sqlstate:42888

SQL0540N

表 表名 的定义不完整,因为它缺少主索引或必需的唯一索引。 所指定的表是用 PRIMARY KEY 子句或 UNIQUE 子句定义的。 其定义不完整,在对主键(主索引)和对任何 UNIQUE 子句中的每组列(必需的唯一索引) 定义唯一的索引之前,不能使用该表。 尝试在 FOREIGN KEY 子句中或在 SQL 处理语句中使用该表。

无法执行该语句。

在引用该表前,在表上定义主索引或必需的唯一索引。

sqlcode:-540

sqlstate:57001

SQL0541W

引用约束、主键或唯一约束 名称 被忽略,因为它是重复的约束。 如果 名称 指的是引用约束,那么 FOREIGN KEY 子句使用与另一 FOREIGN KEY 子句相同的外键和父表或相同的外键和父昵称。

如果 名称 指的是主键或唯一约束,那么下列其中一种情况存在。

  • PRIMARY KEY 子句使用与语句中 UNIQUE 子句相同的列集合。
  • UNIQUE 子句使用与语句中 PRIMARY KEY 子句或另一个 UNIQUE 子句相同的列集合。
  • 该表已经存在针对同一组列的 PRIMARY KEY 或 UNIQUE 约束。

名称 是约束名(如果指定)。

如果未指定约束名,那么 名称 是 FOREIGN KEY 或 UNIQUE 子句的列列表中指定第一个列名,后跟三个句点。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

某些数据源未向 名称 提供适当的值。 在这些情况下,相应的字段中包含一些值(例如,“未知”)用于指示未知实际值。

未创建指示的引用约束或唯一约束。 成功地处理了该语句。

不需要执行任何操作。 处理可以继续。

sqlcode:+541

sqlstate:01543

SQL0542N

名为 列名 的列不能是主键或者唯一键约束的列,因为它可以包含空值。 在 PRIMARY KEY 子句或 UNIQUE 子句中标识的名为 列名 的列被定义为允许使用空值,或者尝试将作为 PRIMARY KEY 或 UNIQUE 约束的一部分的列改变为允许使用空值。

联合系统用户:某些数据源不会为 列名 提供适当的值。 在这些情况下,相应的字段中包含一些值(例如,“未知”)用于指示未知实际值。

无法处理该语句。

更正列、主键或唯一键定义。 如果 ALTER TABLE 语句返回了此错误,那么必须在移除 PRIMARY KEY 或 UNIQUE 约束之后才能将列改变为允许空值。

sqlcode:-542

sqlstate:42831

SQL0543N

因为检查约束 约束名 限制删除,所以不能删除父表中的行。 不能执行删除操作,因为目标表是父表并与带有 SET NULL 删除规则的从属表的引用约束连接。 但是,对从属表定义的检查约束对该列进行了限制,不允许它包含空值。

无法处理该语句。

检查外键及其在从属表中的删除规则,以及冲突检查约束。 更改删除规则或检查约束,使它们不再互相冲突。

sqlcode:-543

sqlstate:23511

SQL0544N

因为表包含违反约束的行,所以不能添加检查约束 约束名 表中至少一现有行违反了检查约束,该约束是在 ALTER TABLE 语句中添加的。

无法处理该语句。

检查在 ALTER TABLE 语句中指定的检查约束定义和表中的数据,以确定违反约束的原因。 更改检查约束或数据,以便不违反该约束。

sqlcode:-544

sqlstate:23512

SQL0545N

因为行不满足检查约束 约束名,所以不允许所请求的操作。 检查约束违反可能在 INSERT 或 UPDATE 操作中发生。 结果行违反了该表上的检查约束定义。

无法处理该语句。

检查在目录视图 SYSCAT.CHECKS 中的数据和检查约束定义,以确定为什么 INSERT 或 UPDATE 语句失败。 更改数据,以便不违反该约束。

sqlcode:-545

sqlstate:23513

SQL0546N

检查约束 约束名 无效。 CREATE TABLE 或 CREATE NICKNAME、ALTER TABLE 或 ALTER NICKNAME 语句中的检查约束由于下列其中一个或多个原因而无效:

  • 约束定义包含子查询
  • 约束定义包含列函数
  • 约束定义包含主机变量
  • 约束定义包含参数标记
  • 约束定义包含专用寄存器或者依赖于专用寄存器的值的内置函数
  • 约束定义包含全局变量
  • 约束定义包含变体用户定义的函数
  • 约束定义包含带有外部操作的用户定义的函数
  • 约束定义包含带有暂存选项的用户定义的函数
  • 检查约束是列定义的一部分,且其检查条件包含对除正在定义的列以外的列名的引用。
  • 约束定义包含取消引用操作或 DEREF 函数,在该函数中受限制的引用自变量不同于对象标识(OID)列。
  • 约束定义使用 TYPE 谓词。
  • 约束定义包括带有 SCOPE 子句的 CAST 规范。
  • 使用属性 ENFORCED 定义了函数依赖性。
  • 在函数依赖性的子集列中指定了可空列。
  • 约束定义包含文本搜索功能。
  • 约束定义包含 XML 列。
  • 约束定义包含 XMLQUERY 或 XMLEXISTS 表达式。

无法处理该语句。

根据错误原因的不同,用户响应为下列其中一项:

  • 更改检查约束,使它不包括列示的项目。
  • 将检查约束定义移出列定义,使它成为表级别约束定义。
  • 更改函数依赖性,以便使它不指定 ENFORCED 属性。
  • 在函数依赖性的子集列中将可空列更改为不可空。

sqlcode:-546

sqlstate:42621

SQL0548N

使用检查条件元素定义的检查约束或生成列无效。 CREATE TABLE 或 CREATE NICKNAME、ALTER TABLE 或 ALTER NICKNAME 语句中的检查约束由于下列其中一个或多个原因而无效:

  • 约束定义包含子查询
  • 约束定义包含列函数
  • 约束定义包含主机变量
  • 约束定义包含参数标记
  • 约束定义包含专用寄存器或者依赖于专用寄存器的值的内置函数
  • 约束定义包含全局变量
  • 约束定义包含不确定的函数
  • 约束定义包含带有外部操作的用户定义的函数
  • 约束定义包含带有暂存选项的用户定义的函数
  • 定义包含带有 CONTAINS SQL 或 READS SQL DATA 选项的用户定义的函数
  • 定义包含对基于表达式的生成列的引用
  • 检查约束是列定义的一部分,其检查条件包含对列名的引用,而该列名不是正在定义的列的列名
  • 生成列定义包含对其自身的引用
  • 约束定义包含取消引用操作或 DEREF 函数,在该函数中受限制的引用自变量不同于对象标识 (OID) 列
  • 约束定义使用 TYPE 谓词
  • 约束定义包括带有 SCOPE 子句的 CAST 规范
  • 约束或生成列定义包含文本搜索功能
  • 约束定义包含 XML 列
  • 约束定义包含 XMLQUERY 或 XMLEXISTS 表达式
  • 生成列表达式引用为其定义了列掩码的列

在错误消息的正文中的标记列示了无效项目。

无法处理该语句。

根据错误原因的不同,用户响应为下列其中一项:

  • 更改检查约束或生成列,以使它不包括列示的项目。
  • 将检查约束定义移出列定义,使它成为表级别约束定义。

sqlcode:-548

sqlstate:42621

SQL0549N

statement 语句不允许用于 object-type1 object-name1 因为绑定选项 DYNAMICRULES RUN 对 object-type2 无效。 程序尝试发出指示的 SQL 语句,该语句是仅可在程序包展示运行行为中动态预编译的几条 SQL 语句之一。 那些 SQL 语句是:

  • 动态 GRANT 语句
  • 动态 REVOKE 语句
  • 动态 ALTER 语句
  • 动态 CREATE 语句
  • 动态 DROP 语句
  • 动态 COMMENT ON 语句
  • 动态 RENAME 语句
  • 动态 SET INTEGRITY 语句
  • 动态 SET EVENT MONITOR STATE 语句
  • 动态 TRANSFER OWNERSHIP 语句
  • 动态 CREATE USAGE LIST
  • 动态 ALTER USAGE LIST
语句
SQL 语句出错
object-type1
PACKAGE 或 DBRM。 DBRM 仅在 DRDA 连接中有效。
object-name1
如果 对象类型-1 是 PACKAGE,那么 对象名-1 是程序包的名称,格式为“location-id.collection-id.package-id”。 如果 对象类型-1 是 DBRM,那么 对象名-1 是 DBRM 的名称,格式为“plan-name DBRM-name”。
object-type2
PACKAGE 或 PLAN。 PLAN 仅在 DRDA 连接中有效。 如果 对象类型-1 是 PACKAGE,那么 对象类型-2 可以是 PACKAGE 或 PLAN(以 DYNAMICRULES(BIND) 绑定的那一个)。 如果 对象类型-1 是 DBRM,那么 对象类型-2 是 PLAN。

不能执行 SQL 语句。

执行下列其中一个操作以更正错误:

  • 如果 SQL 语句是嵌入式的,那么移除它,再次预编译和编译应用程序并重新发出 BIND 命令。
  • 如果适当,将 SQL 语句与使用 DYNAMICRULES(RUN) 绑定的程序包或计划配合使用。
  • 对将 SQL 语句绑定至的计划或程序包发出带有 DYNAMICRULES(RUN) 选项的 REBIND 命令。

sqlcode:-549

sqlstate:42509

SQL0551N

由于授权标识不具有执行操作所必需的授权或特权,因此语句失败。 授权标识:授权标识。 操作:操作。 对象:对象名 无法对所指定对象执行该操作。 通常会因为授权标识没有执行该操作所需的权限或特权而返回此消息。 在某些情况下,系统会对不允许该操作的对象(即使授权标识具有管理权限)返回此消息。

可能会因为不同原因而返回此消息。 以下是可能返回此消息的场景的一些示例:

场景 1
尝试创建或更改具有引用约束的表,但由于用户不具有 REFERENCE 特权而失败。 在此场景中,运行时标记 操作 的值是“REFERENCES”,而运行时标记 对象名 的值是该约束所引用的对象。
场景 2
由于创建数据库的用户标识不再存在或者不再具有执行 DB2 实用程序或 CLI 程序包所需的特权,因此执行 DB2 实用程序或 CLI 应用程序失败。
场景 3
由于用户对 SQL 路径中的任何候选例程都不具有 EXECUTE 特权,因此调用例程失败。 在此场景中,运行时标记 对象名 的值是 SQL 路径中候选例程的名称。
场景 4
由于用来绑定例程的用户标识不具有发出该例程中的所有语句所需的特权,因此创建例程失败。
场景 5
使用 CREATE 或 REPLACE 语句替换现有对象因用户不是该对象的所有者而失败。
场景 6
由于用户的授权标识与启动联机移动表操作的用户的授权标识不同,因此尝试完成联机移动表操作失败。
场景 7
尝试对与基于表达式的索引相关联的系统生成统计视图执行不受支持的操作。 系统不支持任何用户修改统计视图的特权或访问此类型的统计视图。 但是,对底层表具有足够权限和特权的用户可更新此类型的统计视图的统计信息(通过发出 RUNSTATS 命令或手动更新统计信息)。
在联合环境中:
返回此消息的原因可能是,下列操作因用户不具有必需的权限而失败:

  • 更改下列其中一个用户映射选项:
    • REMOTE_PASSWORD
    • FED_PROXY_USER
    • USE_TRUSTED_CONTEXT
  • 更改可信用户上下文
  • 创建或删除具有 FED_PROXY_USER 选项或 USE_TRUSTED_CONTEXT 选项的用户映射
  • 创建或删除具有 FED_PROXY_USER 选项的服务器

可以在联合服务器和/或数据源中执行所需的授权。

某些数据源没有为运行时标记 授权标识操作 和 对象名 提供适当的值。 在这些情况下,消息标记可能具有下列其中一种格式:

  • <data source> AUTHID:UNKNOWN
  • UNKNOWNM
  • <data source> :TABLE/VIEW.
如果授权标识 授权标识 没有必需的权限或特权,请根据情况授予必需的特权或权限。

以下是对本消息的说明部分中描述的场景的响应:

场景 1
通过使用 GRANT REFERENCES ON 对象名 TO 授权标识 语句来授予 REFERENCES 特权。
场景 2
通过连接到数据库,然后从实例目录的 bnd 子目录中发出下列其中一个 CLP 命令,将 DB2 实用程序或 CLI 程序包与数据库重新绑定:

  • 对于 DB2 实用程序:DB2 bind @db2ubind.lst blocking all grant public
  • 对于 CLI 程序包:DB2 bind @db2cli.lst blocking all grant public

如果用户没有对该程序包的 EXECUTE 特权,请执行 GRANT 语句来授予对该程序包的 EXECUTE 特权。

场景 3
通过执行 GRANT 语句,将该例程的 EXECUTE 特权授予该授权标识。
场景 4
将该例程中的语句尝试访问的对象的显式特权授予该授权标识。
场景 5
通过下列其中一种方式对场景 5 作出响应:

  • 以所要替换的对象的所有者用户身份发出语句。
  • 通过执行 TRANSFER OWNERSHIP 语句移交该对象的所有权。
场景 6
通过使用启动联机移动表操作的用户的授权标识,再次调用该过程。
场景 7
对该操作指定另一对象。

sqlcode:-551

sqlstate:5UA0K 和 42501

SQL0552N

授权标识 没有执行操作 操作 的特权。 授权标识 授权标识 尝试在没有正确权限的情况下执行指定的 操作

联合系统用户:某些数据源未提供 authorization-ID 和 <operation> 的相应值。在这些情况下,消息标记将具有以下格式:“<data source> AUTHID:UNKNOWN”和“UNKNOWN”,指示指定数据源中 authid 和 operation 的实际值未知。

无法处理该语句。

确保 授权标识 有执行该操作的权限。

联合系统用户:可在联合服务器和/或数据源处执行此授权。

sqlcode:-552

sqlstate:42502

SQL0553N

不能以模式名 模式名 来创建对象。 模式名 模式名 无效的原因取决于正在创建的对象的类型。

  • 不能使用模式名 SYSCAT、SYSFUN、SYSPUBLIC、SYSSTAT、SYSIBM 或 SYSIBMADM 来创建表、视图、索引和程序包对象。 强烈建议模式名不应以 SYS 开头,因为以这些字母开始的其他模式可能保留给数据库产品在将来专用。
  • 所有其他类型的对象(例如:用户定义的函数、单值类型、触发器、模式、别名和用法列表)都不能用任何以字母 SYS 开头的模式名创建。

无法处理该语句。

使用有效的模式名或移除显式模式名并且重新运行该语句。

sqlcode:-553

sqlstate:42939

SQL0554N

授权标识不能为自己授予特权或权限。 一个授权标识尝试执行一个语句来为它自己授予特权或权限。 如果这是一个 GRANT 语句,那么该授权标识本身将作为要对其授予特权、权限、安全标号或解除的授权标识列表中的一个条目出现。 如果这是一个 CREATE TRUSTED CONTEXT 或 ALTER TRUSTED CONTEXT,那么该授权标识本身将作为 SYSTEM AUTHID 属性的值或其中一个在 WITH USE FOR 子句中指定的权限名称出现。

无法处理该语句。

移除或替换该语句中的授权标识。

sqlcode:-554

sqlstate:42502

SQL0555N

授权标识不能撤销本身的特权。 授权标识尝试执行 REVOKE 语句,其中授权标识本身作为将从其中撤销特权的授权标识列表中的条目之一出现。

无法处理该语句。

从列表中移除授权标识。

sqlcode:-555

sqlstate:42502

SQL0556N

尝试撤销 授权标识 的特权、安全标号、免除凭证或角色遭到拒绝,因为 授权标识 没有此特权、安全标号、免除凭证或角色。 不能撤销特权、安全标号、免除凭证或角色,因为 授权标识 没有该特权、安全标号、免除凭证或角色。

无法处理该语句。

更改 REVOKE 语句以符合 REVOKE 规则,然后重新提交该语句。 确保当 REVOKE 语句列示数个要撤销的特权、安全标号、免除凭证或角色以及授权标识的列表时,每个授权标识至少拥有其中一个指定的特权、安全标号、免除凭证或角色。

sqlcode:-556

sqlstate:42504

SQL0557N

不能授予或撤销指定的特权组合。

发生了下列情况之一:

  • GRANT 或 REVOKE 语句包含不同类的特权组合。 特权必须全都是一类。 示例为 DATABASE、PLAN 或 TABLE。
  • GRANT 语句尝试对视图授予不允许的特权。 不能对视图授予 ALTER、INDEX 和 REFERENCES。

无法处理该语句。

更正并重新提交该语句。

sqlcode:-557

sqlstate:42852

SQL0558N

从 authorization-ID 撤销权限的尝试被拒绝,因为 authorization-ID 拥有 control 权限。 授权标识具有控制特权。 要撤销的特权是 由控制 特权隐式提供的,因此,除非同时撤销控制特权, 否则不能将其撤销。

CONTROL 的有效值为如下所示:

  • DBADM
  • CONTROL
  • CREATE NOT FENCED ROUTINE

无法执行该语句。 未撤销任何特权。

如果需要,可撤销控制特权。

sqlcode:-558

sqlstate:42504

SQL0562N

未执行该语句,因为无法(直接或间接通过角色)对组 PUBLIC 授予指定数据库或模式特权。 可通过发出 GRANT 语句对用户或组授予特权。

如果尝试(直接或间接通过使用角色)对组 PUBLIC 授予不受支持的特权,那么会返回此消息。

不需要任何响应。

不支持对 PUBLIC 授予管理权限,例如,DBADM 或 SCHEMAADM。

sqlcode:-562

sqlstate:42508

SQL0567N

操作失败,因为指定授权名称不符合标识命名规则。 授权名称:authorization-name 所有数据库对象、用户名或授权名称、密码、组、文件和路径的命名都存在规则。 其中某些规则特定于所运行的平台。

指定的授权名称不符合标识命名规则时,会返回此消息。 例如,授权名称包含 a 到 z、A 到 Z、0 到 9 以及受支持特殊字符以外的字符时,可能会返回此消息。

无法处理该语句。

指定符合标识命名规则的授权名称并再次执行此操作。

sqlcode:-567

sqlstate:42602

SQL0569N

授权标识 权限名称 不能唯一地标识系统中的用户、组或角色。 GRANT 或 REVOKE 语句所指定的授权标识不能唯一地标识安全性名称空间中的用户、角色或组。 对 权限名称 的引用不确定。 请注意,当使用 DCE 安全性时,USER、GROUP 或 ROLE 关键字总是必需的。 请更改该语句以将 USER、GROUP 或 ROLE 关键字显式指定为唯一地标识所指定授权标识。

sqlcode:-569

sqlstate:56092

SQL0570W

未授予类型为 object-type 的对象 object-name 上的所有请求权限。 对类型为 对象类型 的对象 对象名 尝试了“授权”(GRANT)操作,但是未授予某些或所有特权。 发出该语句的授权标识不具有以 GRANT 选项授权的所有特权,或者不具有 ACCESSCTRL 或 SECADM 权限。

授予了所请求的所有有效特权。

获取必需的权限并再次尝试执行该操作。

sqlcode: +570

sqlstate:01007

SQL0572N

程序包 程序包名 不起作用。 程序包 程序包名 标记为不工作并且必须显式重新绑定(而不指定 RESOLVE CONSERVATIVE)才能使用。 不能使用此程序包,因为已经删除一个或多个它所依赖的用户定义的函数。 使用 REBIND(不指定 RESOLVE CONSERVATIVE)或 BIND 命令来显式重新绑定命名程序包。

sqlcode:-572

sqlstate:51028

SQL0573N

在约束 名称 的引用子句中指定的列列表不标识父表或昵称 表名 的唯一约束。 在 名称 标识的约束的引用子句中指定了列名列表,但该列表与所引用表 表名 的主键或任何唯一键的列名都不匹配。

名称 是约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

更正引用子句中的列列表或将唯一约束添加至所引用的表或昵称中。

sqlcode:-573

sqlstate:42890

SQL0574N

表 table-name 中列 column-name 的 DEFAULT 值或 IDENTITY 属性值无效。 原因码:原因码

DEFAULT 值或 IDENTITY 属性值对于表 表名 中的列 列名 无效。 可能的原因码如下所示:

1
值不可赋给该列(因为该常量不符合该数据类型常量的格式)、值有不正确的长度或精度,或函数返回不正确的数据类型。
2
指定了浮点常数,而该列不是浮点数据类型
3
指定了十进制常量,而在赋给列时非零数字会被截断
4
值大于 254 字节,包括字符串的引号、前导字符(诸如十六进制常数的 X)、标准函数名和括号。 忽略值中无意义的空格。 在不均匀的代码页环境中,由于数据库代码页中的字符串的扩展,值可能大于 254 字节。
5
指定了 USER 专用寄存器且字符串数据类型的长度属性小于 8。
6
指定了日期时间专用寄存器(CURRENT DATE、CURRENT TIME 或 CURRENT TIMESTAMP),而与列的数据类型不匹配。
7
指定了不受支持的函数。 指定的函数必须是系统生成的强制类型转换函数或是内置函数 BLOB、DATE、TIME 或 TIMESTAMP。
8
日期时间的自变量不是字符串常量或相应的日期时间专用寄存器。
9
指定了系统生成的强制类型转换函数,而未使用用户定义的单值类型来定义列。
10
对标识列的 START WITH 或 INCREMENT BY 选项指定了带非零小数位的值。
11
专用寄存器被指定为 DEFAULT 值,并且字符串数据类型的长度属性小于 128。
12
指定了十进制浮点常数,而该列不是十进制浮点数据类型。
<0
小于零的任何原因码都是 SQLCODE。 可通过检查与此 SQLCODE 相对应的错误消息来确定 DEFAULT 值规范中的错误。

无法处理该语句。

根据返回的原因码更正 DEFAULT 值或 IDENTITY 属性值。

sqlcode:-574

sqlstate:42894

SQL0575N

不能使用视图或具体化查询表 名称,因为它已经标记为不可用。

视图或具体化查询表 名称 已经标记为不可用,因为已经移除了它所依赖的表、视图、别名或特权。 不能由除下列其中一条语句外的任何 SQL 语句使用该视图:

  • COMMENT ON
  • DROP VIEW 或 DROP TABLE
  • CREATE ALIAS
  • CREATE VIEW 或 CREATE TABLE

无法处理该语句。

如果 名称 是视图,那么通过发出 CREATE VIEW 语句,并使用同一视图定义作为不可用视图来重新创建该视图。 如果 名称 是具体化查询表,那么通过使用与不可操作具体化查询表中相同的具体化查询表定义发出 CREATE TABLE 语句来重新创建具体化查询表。

sqlcode:-575

sqlstate:51024

SQL0576N

不能为 名称-2 创建别名 名称,因为它将导致重复的别名链。 名称-2 上 名称 的别名定义将导致可能永远都不能解析的重复别名链。 例如,“别名 A 参阅别名 B,而别名 B 参阅别名 A”就是永远不能解析的别名链。

无法处理该语句。

更改 名称 的别名定义,或修订别名链中其他别名定义之一的定义以避免重复链。

sqlcode:-576

sqlstate:42916

SQL0577N

用户定义的例程 例程名(特定名称 特定名称)尝试修改数据,但该例程未定义为 MODIFIES SQL DATA。 不允许用来实现例程实体的程序修改 SQL 数据。 移除任何修改数据的 SQL 语句然后重新编译程序。 调查允许的 SQL 的级别,就像在定义例程时所指定的那样。

sqlcode:-577

sqlstate:38002

sqlstate:42985

SQL0579N

例程 例程名(特定名称 特定名称)尝试读取数据但是没有定义为 READS SQL DATA 或 MODIFIES SQL DATA。 不允许用来实现例程的实体的程序读取 SQL 数据。 移除任何读取数据的 SQL 语句然后重新编译程序。 调查允许的 SQL 的级别,就像在定义例程时所指定的那样。

sqlcode:-579

sqlstate:38004

sqlstate:42985

SQL0580N

CASE 表达式的结果表达式不能都为 NULL。 语句中有一个 CASE 表达式,它所有的结果表达式(THEN 和 ELSE 关键字后面的表达式)都以关键字 NULL 编码。

无法处理该语句。

更改 CASE 表达式以至少包括一个除关键字 NULL 外的结果表达式。

sqlcode:-580

sqlstate:42625

SQL0581N

CASE 表达式或 DECODE 函数的结果表达式的数据类型不兼容。 语句中有一个 CASE 表达式或 DECODE 函数,它们有不兼容的结果表达式(跟在 CASE 表达式的 THEN 和 ELSE 关键字后面的表达式)。

对结果表达式使用“结果数据类型规则”来确定 CASE 表达式的数据类型或者 DECODE 函数的结果。

无法处理该语句。

更正结果表达式,使它们兼容。

sqlcode:-581

sqlstate:42804

SQL0582N

VALUES 子句中的 CASE 表达式、IN 谓词、GRUOP BY 子句或 ORDER BY 子句不能包括定量谓词、使用全查询的 IN 谓词或 EXISTS 谓词。

CASE 表达式的搜索条件是:

  • 定量谓词(使用 SOME、ANY 或 ALL 的谓词),
  • 使用全查询的 IN 谓词,或
  • EXISTS 谓词

而 CASE 表达式是以下各项的一部分:

  • VALUES 子句
  • IN 谓词
  • GROUP BY 子句,或
  • ORDER BY 子句。

不支持这样的 CASE 表达式。 该 CASE 表达式可能是用 SQL 编写的函数的一部分。

无法处理该语句。

从 CASE 表达式中移除对定量谓词、IN 谓词或 EXISTS 谓词的使用。 如果该 CASE 表达式是函数的一部分,那么可能需要编写不带导致错误的函数的查询。

sqlcode:-582

sqlstate:42625

SQL0583N

使用例程或表达式 名称 是无效的,因为它是不确定的或者具有外部操作。 例程(函数或方法)或表达式已定义为不确定的或者定义为具有外部操作。 这在使用它的上下文中不受支持。 这些不支持的上下文是:

  • 作为 BETWEEN 谓词的第一个操作数
  • 在简单 CASE 表达式中第一个 WHEN 关键字前面的表达式中。
  • 作为 DECODE 函数的第一个自变量
  • 作为 RATIO_TO_REPORT 函数的自变量
  • 在 GROUP BY 子句的表达式中
  • 在 ORDER BY 子句的表达式中(仅外部操作)
  • 在 PARTITION BY 子句的表达式中
  • 在用户定义的谓词规范或索引扩展定义的 FILTER 子句中
  • 在过程定义的全局变量或参数的缺省表达式中

无法处理该语句。

如果不打算使用不确定的或外部的操作例程或表达式,那么以一个没有这些特征的例程来替代。 如果要执行与不确定的或外部的操作例程或表达式相关的行为,请使用意图明确的语句替代格式。

  • 相反,使用等价的比较谓词(a>=b 和 a<=c 代替 b 和 c之间的 a)的等价组合使用相应的语句。
  • 不使用简单 WHEN 子句或 DECODE 函数,而是使用相应的搜索 WHEN 子句,在该子句中,将在每个搜索条件中指定该例程。
  • 将 RATIO_TO_REPORT 函数的自变量推送到嵌套的查询中。
  • 从 GROUP BY 子句中移除不确定的或外部的操作例程或表达式。 如果期望对基于不确定的或外部的操作例程或表达式的结果列进行分组,那么使用嵌套表表达式或公共表表达式来首先提供一个结果表,而该表达式作为一个结果列。
  • 从 ORDER BY 子句中移除外部操作例程。 如果列是查询的结果集的一部分,那么将 ORDER BY 子句中的表达式更改为排序键的简单整数或简单列名格式。
  • 从 FILTER 子句中移除不确定的或外部的操作例程或表达式。
  • 从过程定义的全局变量或参数的缺省子句中移除不确定的或外部的操作例程或表达式。

sqlcode:-583

sqlstate:42845

SQL0584N

由于 NULL 关键字或 DEFAULT 关键字的使用无效而使得此语句失败。 创建表时,可为一个或多个列定义缺省值。 在为某些列定义了此缺省行为的情况下将数据插入或合并到表中时,在 VALUES 子句中定义“DEFAULT”将导致缺省值插入或合并到这些列中。

可以使用 NULL 关键字在语句中指出特定列不存在数据。

DEFAULT 关键字和 NULL 关键字的使用方式有一定的需求和限制。 下面只是一些示例:

  • 示例 1:DEFAULT 关键字可在具有 INSERT 语句和 MERGE 语句的 VALUES 子句中使用。
  • 示例 2:不包含在 INSERT 语句中的 VALUES 子句必须在每一列的至少一行中有一个除 NULL 之外的值,除非可以根据 NULL 在此语句中使用的上下文来解析 NULL 的数据类型。
  • 示例 3:在联合环境中,DEFAULT 关键字不能在对象是昵称的 INSERT 语句的 VALUES 子句中使用。
修改语句,使得不会以不受支持的方式使用 NULL 关键字或 DEFAULT 关键字,然后重新提交该语句。

sqlcode:-584

sqlstate:42608

SQL0585N

模式名 模式名 在集合 专用寄存器 语句中出现了多次。 专用寄存器 专用寄存器 的 SET 语句多次包括了模式 模式名

无法处理该语句。

验证 SET 语句中的列表包含重复值。 如果错误只是不正确地输入了模式名,它偶尔会重复另一个条目,那么正确地输入模式名并重新发出该语句。 如果该条目确实是重复的,那么不需要执行任何操作。

sqlcode:-585

sqlstate:42732

SQL0586N

专用寄存器 专用寄存器的总长度不能超过 长度 专用寄存器 被定义为小于在 SET 语句上指定的值的长度。 字符串内容包括每个用双引号定界并用逗号与下一个模式名隔开的模式名。 专用寄存器中所有模式名字符串的总长度不能超过专用寄存器的最大长度。 SET PATH 或 SET CURRENT PACKAGE PATH 语句可能会产生此消息。

不能处理语句或命令。

移除模式名以减小总长度,使它适合专用寄存器的长度。 如果失败的语句是 SET PATH,并且需要所有模式名,那么可能需要合并某些用户定义的函数、过程、方法或者单值类型,以便 SQL PATH 上需要较少的模式名。

sqlcode:-586

sqlstate:42907

SQL0590N

上下文 name 中指定的名称 context-tag 不唯一。 名称 名称 被指定为由 上下文标签 定义的上下文中的参数、SQL 变量、游标、标号或条件。 该名称不是唯一的。

如果 context-tag 为“BEGIN…END”,那么错误的上下文是动态 SQL 复合语句。 否则,错误的上下文是触发器或例程,而 上下文标签 是包含复合语句的触发器名或例程名。

  • 如果 名称 是参数名,那么在参数列表和例程的 EXPRESSION AS 子句中它必须是唯一的。
  • 如果 名称 是状态变量名,那么在状态变量列表中它必须是唯一的。
  • 如果 名称 是 SQL 变量名、游标名或条件,那么在复合语句中它必须是唯一的。
  • 在复合语句中标号必须是唯一的,且与它嵌套在其中的语句的标号不同。
更改该名称,以使它唯一。

sqlcode:-590

sqlstate:42734

SQL0593N

必须为“行更改时间戳记”列、“行开始”列、“行结束”列或者时间段的列指定 NOT NULL。 column-name “行更改时间戳记”列、“行开始”列和“行结束”列不支持空值。 在 CREATE TABLE 或 ALTER TABLE 语句中定义了这样一列时,必须对这些列指定 NOT NULL 子句。

必须将时间段的列定义为 NOT NULL。

无法执行该语句。

请更改该语句以便对列 列名 指定 NOT NULL。

sqlcode:-593

sqlstate:42831

SQL0595W

已将隔离级别 请求级别 已升级为 升级的级别 DB2 不支持所指定的隔离级别。 它已升级为由 DB2 支持的下一个更高的隔离级别。 要避免此警告,可指定 DB2 支持的隔离级别。 DB2 支持隔离级别“可重复的读”(RR)、“读稳定性”(RS)、“游标稳定性”(CS) 和“未落实的读”(UR)。

sqlcode:+595

sqlstate:01526

SQL0597N

无法检索 DATALINK 值。 原因码:原因码

无法检索 DATALINK 值。 可能的原因码如下所示:

01
DB2 Data Links Manager 未授权 DB2 用户检索嵌入用来修改 DATALINK 值引用文件的写标记的 DATALINK 值。

操作视原因码而定,如下所示。

01
联系 DB2 Data Links Manager 管理员以授予对此文件的写访问特权。

sqlcode:-0597

sqlstate:42511

SQL0598W

现有索引 名称 被用作主键或唯一键的索引。 定义主键或唯一键的 ALTER TABLE 操作需要索引,并且指定的索引与必需的索引相匹配。

如果非分区主键索引或非分区唯一键索引的索引描述所指定的一组列与主键或唯一键的列相同(顺序任意),并且它被指定为唯一索引,那么它将被视为匹配,而不考虑升序或降序指定。

但是,如果分区索引的列不是分区键列的超集,那么这些索引不会视为匹配。

该语句处理成功。

不需要执行任何操作。

sqlcode: +598

sqlstate:01550

SQL0599W

不对基于长串数据类型的单值类型创建比较函数。 不为基于长串数据类型(BLOB、CLOB、DBCLOB、LONG VARCHAR 或 LONG VARGRAPHIC) 的单值类型创建比较函数,原因是相对应的函数不可用于这些内置数据类型。

这是警告情况。 该语句处理成功。

不需要执行任何操作。

sqlcode:+599

sqlstate:01596

SQL0600N

因为特征符重复,或者是因为例程 例程名 将覆盖现有例程,所以无法生成该例程。 在 CREATE 或 ALTER 操作期间,无法创建系统生成的强制类型转换函数、observer 方法、mutator 方法或构造函数,原因是模式中已存在同名和同特征符的另一函数或方法,或者是因为将创建的方法或函数会覆盖现有方法。 为导致冲突的用户定义的类型、属性或强制类型转换函数选择另一名称,或删除与无法生成的函数或方法同名的函数或方法。

sqlcode:-600

sqlstate:42710

SQL0601N

要创建对象的名称与类型 type 的现有名称 name 相同。 CREATE 或 ALTER 语句尝试创建或添加对象 名称,但应用程序服务器上或同一语句中已存在类型为 类型 的该名称的对象。

如果 类型 是 FOREIGN KEY、PRIMARY KEY、UNIQUE 或 CHECK CONSTRAINT,那么 名称 是 ALTER NICKNAME、ALTER TABLE、CREATE NICKNAME 或 CREATE TABLE 语句中指定的或由系统生成的约束名。

如果 类型 为 ROLE,那么该名称是在 CREATE 或 ALTER ROLE 语句中指定的角色名。

如果 类型 是 DATA PARTITION,那么 名称 是在 ALTER TABLE 或 CREATE TABLE 语句中指定的数据分区名。

当使用 REGISTER 命令或者 XSR_REGISTER、XSR_DTD 或 XSR_EXTENTITY 这三个过程之一来注册 XML 模式存储库对象时也可能会产生此错误。 当 XSROBJECT 的名称已存在时出错。

联合系统用户:某些数据源未向 名称 和 类型 消息标记提供适当的值。 在这些情况下,名称 和 类型 将具有以下格式:“OBJECT:<data source> TABLE/VIEW”,“UNKNOWN”表示指定数据源处的实际值未知。

如果 类型 为“许可权”,那么 名称 是在 CREATE PERMISSION 语句中指定的许可权名称。

如果 类型 为“掩码”,那么 名称 是在 CREATE MASK 语句中指定的掩码名称。

如果 类型 为成员子集,那么 名称 是在 CALL SYSPROC.WLM_CREATE_MEMBER_SUBSET 语句中指定的成员子集名称。

无法处理该语句。 未创建任何新对象,且未改变或修改现有的对象。

删除现有的对象或为新对象选择另一名称。

联合系统用户:如果语句是 CREATE FUNCTION MAPPING 或 CREATE TYPE MAPPING 语句,那么用户还可考虑不提供类型映射名,系统将自动为此映射生成唯一名称。

sqlcode:-601

sqlstate:42710

SQL0602N

由于指定了过多的列、时间段或者基于表达式的键,因此无法创建或变更索引。 可以包括在索引中的列数存在上限。 给定索引中允许的列数受各种因素影响:表的类型,以及包括在索引中的列是否使用随机顺序。

在尝试创建索引、变更索引或创建索引扩展,并且在索引中生成的列数将超出上限时,将返回此消息。

联合系统用户:

  • 索引中允许的列数的限制随数据源不同而有所变化。
  • 可能在联合服务器或数据源中检测到此问题。
请查看与索引中的最大列数相关的限制。 然后,修改索引定义以减少列数。

联合系统用户:更改索引定义,以符合数据源的列限制。

sqlcode:-602

sqlstate:54008

SQL0603N

不能创建唯一索引,因为该表包含将导致重复的索引条目的数据。 因为所指定的表已经包含与所标识列和时间段的值重复的行,所以不能将 CREATE INDEX 语句中定义的索引创建为唯一索引。 如果对 XML 列定义索引,那么可能会为单个 XML 文档生成重复的索引值。

如果分区表带有新连接的分区(即,SYSDATAPARTITIONS 目录表中 STATUS 列中的值为“A”的分区),那么新连接的分区中可能存在重复的索引条目。 CREATE INDEX 语句将对新连接的表分区创建索引分区,即使您尚无法查看该分区中的数据亦如此。

联合系统用户:数据源也可能会检测到此情况。

无法处理该语句。 未创建指定的索引。

检查数据以确认是否允许重复数据。 另外,考虑创建非 UNIQUE 索引。

如果索引已分区,并且表带有新连接的分区,请运行 SET INTEGRITY 语句以使新连接的分区进入联机状态。 SET INTEGRITY 语句可能会移除违反其他约束的重复数据,因此您应该再次发出 CREATE INDEX 语句。 如果未再次创建唯一索引,请查找将会导致索引条目重复的数据。

sqlcode:-603

sqlstate:23515

SQL0604N

列的长度、精度或小数位属性、单值类型、结构化类型、数组类型、结构化类型的属性、例程、强制类型转换目标类型、类型映射或全局变量 数据项 无效。 CREATE 语句或 ALTER 语句中的数据类型规范或者 CAST 规范出错。 可能指定了无效长度、精度或小数位属性,或可能是数据类型本身不正确,或是在此上下文中不允许。 错误的位置由 数据项 给出,如下所示:

  • 对于 CREATE 或 ALTER TABLE 语句,数据项 给出包含错误的列的名称或包含错误的数据类型的名称。 如果该列数据类型是结构化类型或 XML 数据类型,那么 INLINE LENGTH 值必须至少为 292,但不能超过 32673。 对于 LOB 数据类型,INLINE LENGTH 值必须至少为 LOB 描述符的大小(请参阅 CREATE TABLE 语句),但是不能超过 32673。
  • 对于 CREATE FUNCTION 语句,数据项 是标识语句中的问题区的标记。 例如,“PARAMETER 2”或“RETURNS”或“CAST FROM”。 在某些情况下,还可能是数据类型包含错误。
  • 对于 CREATE DISTINCT TYPE 语句,数据项 给出正在定义的类型的名称或包含错误的源数据类型的名称。
  • 对于 CREATE TYPE(array) 语句,数据项 给出包含错误的数据类型。 方括号中指定的整数值必须是一个大于或等于 1 且小于或等于 2147483647 的整数。
  • 对于 CREATE 或 ALTER TYPE 语句,数据项 给出包含错误的属性的类型或者具有错误直接插入长度值的结构化类型的名称。 直接插入长度不能小于 292 和构造函数为结构化类型返回的大小。
  • 对于 CREATE VARIABLE 语句,数据项 给出包含不正确数据类型的变量的名称。 全局变量的数据类型可以是除 LONG 类型、LOB、ARRAY 和结构化类型以外的任何内置数据类型。 支持单值类型和引用类型。
  • 对于 CAST(表达式 AS 数据类型),数据项 是“CAST”或包含错误的数据类型。
  • 对于 XMLCAST(表达式 AS 数据类型),数据项是“XMLCAST”或包含错误的数据类型。
  • 对于反向类型映射,[p..p] 表达式不能用于远程数据类型。 例如,以下语句(反向类型映射)是不正确的。
    
    CREATE TYPE MAPPING tm1
           FROM SERVER drdasvr TYPE CHAR([1..255])
           TO SYSIBM.VARCHAR
    

    但是,下列语句(正向类型映射)是正确的。

    
    CREATE TYPE MAPPING tm1
          TO SERVER drdasvr
          TYPE CHAR([1..255])
          FROM SYSIBM.VARCHAR
    

联合系统用户:如果该语句是 CREATE TYPE MAPPING 语句,那么表示尝试创建类型映射,但本地数据类型或远程数据类型的类型属性无效。 原因可能包括:

  • 本地长度/精度设置为 0 或负值。
  • 为诸如日期/时间/时间戳记、浮点或整数的数据类型指定长度/精度属性。
  • 为诸如字符、日期/时间/时间戳记、浮点或整数的数据类型指定小数位属性。
  • 为非字符类型指定 FOR BIT DATA 子句。
  • 非 Informix 日期时间的远程类型的远程精度设置为 0。
  • 在 Informix 日期时间类型的类型映射中正在使用无效的字段限定符。
  • 结束值小于精度/小数位范围内的起始值。

无法处理该语句。

更正语法,然后再次尝试。

sqlcode:-604

sqlstate:42611

SQL0605W

未创建索引,因为已经存在具有匹配定义的索引 名称 CREATE INDEX 语句已尝试创建一个与现有索引定义相匹配的新索引。

如果两个索引定义标识具有相同升序或降序规范的相同顺序的同一列,并且它们都强制唯一性或者只有新索引不强制唯一性,那么这两个索引定义相匹配。

如果两个索引定义标识具有相同或反向升序或降序索引键顺序的相同顺序的同一列,并且至少有一个索引同时支持正向和反向扫描,那么这两个索引定义也相匹配。

对于分区表而言,如果一个索引定义是分区索引定义,而另一个是非分区索引定义,那么它们不匹配,即使所有其他规范都匹配亦如此。 对于同一个表,其他方面的定义类似的分区索引和非分区索引可以共存。

未创建新索引。

除非现有索引 名称 是不适当的索引,否则不需要执行任何操作。 例如,如果现有索引 名称 不允许反向扫描,而必需的索引却允许,那么该现有索引不是适合的索引(反之亦然)。 在此情况下,在可创建必需的索引之前,必须删除索引 名称

sqlcode: +605

sqlstate:01550

SQL0606N

因为指定的表和列不归 所有者 所有,所以 COMMENT ON 或 LABEL ON 语句失败。 尝试对不存在或不归消息正文中指定的所有者所拥有的表或列进行注释或标记。

SQL 语句的处理已结束。

更正该语句。 再次尝试。

sqlcode:-606

sqlstate:42505

SQL0607N

未对系统对象定义 操作 不能对系统对象执行 SQL 语句中指定的 操作。 尝试了下列其中一项:

  • ALTER、DROP 或 TRANSFER OWNERSHIP 系统拥有的对象,例如,系统目录表、内置函数或内置数据类型
  • 对系统拥有的内置函数进行注释(COMMENT ON)。
  • 对系统目录表进行插入(INSERT)、删除(DELETE)或截断(TRUNCATE)。
  • 直接对系统目录表进行更新(UPDATE)。 系统目录表的子集的某些列是可更新的。 对于这些目录表上的 UPDATE 操作,应使用 SYSSTAT 模式中的可更新视图。 有关可更新目录视图(SYSSTAT 视图)的描述,请参阅 SQL Reference。
  • 系统表上索引的 CREATE 或 DROP
  • 系统表上触发器的 CREATE
  • 在包含 FOR UPDATE 子句的 SELECT 语句的 FROM 子句中标识了非可更新的系统表。 要获取可更新系统目录的列表,请参阅 SQL Reference。
  • 系统表空间的 DROP 或 ALTER。
  • 系统数据库分区组的 DROP 或 ALTER。
  • 系统缺省工作负载的 DROP。
  • SYSDEFAULTUSERWORKLOAD 的 ALTER(指定了 ENABLE、DISABLE、POSITION、ADD 或 DROP 选项)。
  • SYSDEFAULTADMWORKLOAD 的 ALTER(指定了 COLLECT 之外的选项)。
  • 工作负载的 ALTER(将 SYSDEFAULTADMWORKLOAD 或 SYSDEFAULTUSERWORKLOAD 指定为 POSITION BEFORE 或 AFTER 选项的值)。
  • IBMCATGROUP 或 IBMTEMPGROUP 数据库分区组的 REDISTRIBUTE。
  • 对名称以“SYS”开头的模式传递所有权。
  • 为缺省管理工作负载 SYSDEFAULTADMWORKLOAD 创建(CREATE)工作操作集或阈值。
  • 插入至管理任务调度程序 (ATS) 使用的 SYSTOOLS.ADMINTASKS 表。
  • 在管理任务调度程序 (ATS) 使用的 SYSTOOLS.ADMINTASKS 表中更新受限列。
  • 更改管理任务调度程序 (ATS) 使用的 SYSTOOLS.ADMINTASKS 表。
  • 装入到管理任务调度程序 (ATS) 使用的 SYSTOOLS.ADMINTASKS 表。
  • 对 UTL_DIR 模块使用的 SYSTOOLS.DIRECTORIES 表执行 INSERT。
  • 对 UTL_DIR 模块所使用的 SYSTOOLS.DIRECTORIES 表执行 UPDATE。
  • 对 UTL_DIR 模块所使用的 SYSTOOLS.DIRECTORIES 表执行 ALTER。
  • 对 UTL_DIR 模块所使用的 SYSTOOLS.DIRECTORIES 表执行 LOAD。

不能对保留模式中的任何表执行联机管理移动表操作。

无法处理该语句。

除了可通过可更新 SYSSTAT 视图更新的系统目录表的那些列,不要尝试修改任何系统对象。 请参阅 SQL Reference 以了解更多信息。

sqlcode:-607

sqlstate:42832

SQL0612N

名称 是一个重复的名称。 发出了一条语句,该语句在不允许重复的地方多次出现同一名称。 这些名称的出现位置随语句类型的不同而有所变化。

  • CREATE TABLE 语句不能对两个列定义相同的列名。
  • 用于指定表分区的 CREATE TABLE 语句不能对两个数据分区定义完全相同的数据分区名。
  • 在 ALTER TABLE 语句中,如果指定的分区名与一个表中现有数据分区的分区名完全相同,那么不能将该数据分区添加或连接至该表。
  • CREATE VIEW 语句或公共表表达式定义在列名列表中不能有相同的列名。 如果未指定列名列表,那么视图的选择列表中各列的列名必须是唯一的。
  • ALTER TABLE 语句不能使用已经存在的列名或与正在添加的另一列相同的列名将列添加到表中。 此外,仅可在单个 ALTER TABLE 语句中的一个 ADD、DROP COLUMN 或 ALTER COLUMN 子句中引用列名。
  • CREATE INDEX 不能多次指定一个列名作为索引键或索引的 INCLUDE 列的一部分。
  • CREATE TRIGGER 不能在导致激活更新触发器的列列表中多次指定一个列名。
  • CREATE TABLE OF 语句不能对 REF IS 列和结构化类型的任何属性定义相同的名称。
  • CREATE TYPE 语句不能对 ROW 数据类型中的两个字段或者结构化类型中的两个属性定义相同的名称。 在类型和所有超类型中,字段名和属性名必须唯一。
  • ALTER TYPE 语句不能使用这样的属性名来将属性添加至结构化类型:即已在该类型或任何其子类型中存在的属性名,或与正在添加的另一属性相同的属性名。 另外,该属性名也不能与从该结构化类型创建的任何表中的 REF IS 列相同。 此外,仅可在单个 ALTER TYPE 语句中的一个 ADD 或 DROP ATTRIBUTE 子句中引用属性名。
  • CREATE INDEX EXTENSION 语句不能对两个参数定义相同的名称。
  • 仅可在单个 ALTER NICKNAME 语句中的一个 ALTER COLUMN 子句中引用列名。
  • XMLQUERY、XMLEXISTS 或 XMLTABLE 参数列表包含两个同名的自变量。
  • XMLTABLE 列列表包含两个同名的列。
  • SELECT 语句的 typed-correlation 子句不能包含两个同名的列。
  • CREATE 或 ALTER TABLE 语句不能在唯一键中多次指定同一时间段。
  • CREATE 或 ALTER TABLE 语句不能定义同名的时间段和列。
  • 在同一 ALTER TABLE 语句中正在添加或改变时间段时,无法删除该时间段。 例如,同一时间段名称不能同时出现在同一 ALTER TABLE 语句的 DROP PERIOD 子句和 ADD PERIOD 子句中。

无法处理该语句。

指定适合于语句类型的唯一名称。

sqlcode:-612

sqlstate:42711

SQL0613N

由 名称 标识的主键、唯一键或表分区键太长或者包含太多的列和时间段。 此错误由以下之一引起:

  • 在 PRIMARY KEY 子句或 UNIQUE 子句中由 名称 标识的列的内部长度总和超过了索引键长度限制,或者列数加上两倍于时间段数的总和超过了最大值 64。 并且,不能使用 LONG VARCHAR 列来定义主键或唯一键。 如果在类型表上定义了主键或唯一约束,那么有附加的索引开销,使得指定的最大列数减少为 63 且长度限制为 4 字节。
  • PARTITION BY 子句中的列数超过了最大值 16。

如果指定 名称,那么它是主键或唯一约束的约束名。 如果未指定约束名,那么 名称 是主键或唯一约束子句中指定的第一个列名,后跟三个句点。

索引键长度限制基于索引使用的表空间的页大小:

Max Key Length  Page size
--------------  ---------
1K              4K
2K              8K
4K              16K
8K              32K

对于表分区键,名称 就是超过了限制的列的列名。

无法处理该语句。

通过消去一个或多个键列或时间段,将主键、唯一键或表分区键定义修改为符合列限制 64 和键长度限制。

sqlcode:-613

sqlstate:54008

SQL0614N

不能创建或改变索引或索引扩展 索引名,因为指定列的组合长度太长。 因为键列内部长度之和将超过索引键长度限制,所以无法创建或改变索引。 也不能使用 LONG VARCHAR、LONG VARGRAPHIC 或 LOB 列创建索引。 如果该索引定义于类型表之上,那么有附加的索引开销,使得最大长度减少 4 字节。 改变一个或多个列的数据类型的 ALTER TABLE 或 ALTER NICKNAME 语句可改变该索引。

因为 GENERATE KEY 函数返回的列的和超过索引键长度限制,所以无法创建索引扩展。

索引键长度限制基于索引使用的表空间的页大小:

Max Key Length  Page size
--------------  ---------
1K              4K
2K              8K
4K              16K
8K              32K

无法处理该语句。 未创建指定的索引或索引扩展,或者无法改变表或昵称。

要修改索引定义或改变列,可消去一个或多个键列,并将键长度减小为允许的最大值。 对于索引扩展定义,指定另一 GENERATE KEY 函数,或者重新定义该函数以减小所返回的行的长度。

sqlcode:-614

sqlstate:54008

SQL0615N

类型为 object-type 的 object-name 对象因当前正在使用而无法删除。 当对象的 DROP 语句正在使用中时,不能发出该语句。

无法处理该语句。 未删除该对象。

关闭那些直接或间接依赖于对象 对象名 的任何游标并重新提交该语句。

对于临时表空间,请在表空间未在使用时重新提交该语句。

对于租户,请确保任何连接都未在使用租户。

sqlcode:-615

sqlstate:55006

SQL0620N

因为 用户标识 没有专用的可恢复数据库空间(表少于 255 个),所以 CREATE TABLE 语句失败。 CREATE TABLE 语句中未指定数据库空间名,因此数据库管理器尝试查找 用户标识 所拥有的专用数据库空间。 在下列任何一种情况下都将出现此消息:

  1. 在 DB2 VM 版数据库中找不到 用户标识 的专用数据库空间。
  2. 找到 用户标识 的一个或多个专用数据库空间,但每一个都包含了 255 个表。
  3. 专用数据库空间位于不可恢复的存储池中。 当 CREATE TABLE 语句未指定数据库空间名时,将只能使用存在于可恢复存储池中的专用数据库空间。

SQL 语句的处理已结束。

针对这三种情况的建议是:

  1. 在可恢复的存储池中获取专用数据库空间。 您可能需要数据库管理员的帮助。
  2. 删除驻留在可恢复存储池中的专用数据库空间的一个表,以释放条目,或者执行(1)中指示的操作。
  3. 如果要在存在于不可恢复的存储池中的数据库空间中创建表,那么在 CREATE TABLE 命令上指定数据库空间名。 否则,执行(1)中指示的操作。

然后重新运行 CREATE TABLE 语句。

如果适当,获取用户的专用数据库空间。

sqlcode:-620

sqlstate:57022

SQL0622N

对于此数据库,子句子句无效。 该子句指示无效,因为它与定义的此数据库的特征不兼容。

原因可能是:

  • 不能在连接至使用 Unicode 代码页创建的数据库时指定 CCSID ASCII 和 PARAMETER CCSID ASCII。
  • 在数据库配置中指定备用整理顺序之前,不能在连接至使用非 Unicode 代码页创建的数据库时指定 CCSID UNICODE 和 PARAMETER CCSID UNICODE。
  • 在连接至使用非 Unicode 代码页的数据库时,不能在此语句中指定 CCSID UNICODE 或 PARAMETER CCSID UNICODE。
  • 仅当连接到使用单字节代码页创建的数据库时才能指定 FOR SBCS DATA。
  • 仅当连接至使用双字节或 Unicode 代码页创建的数据库时才能指定 FOR MIXED DATA。
  • IN 数据库名称.表空间名 或 IN DATABASE 数据库名称 子句是使用与应用程序当前连接的数据库的名称不匹配的数据库名称来指定的。

无法处理该语句。

更改或移除该子句并重新发出 SQL 语句。

要允许在非 Unicode 数据库中使用 Unicode 对象,更新数据库配置以指定备用整理顺序(ALT_COLLATE)。

sqlcode:-622

sqlstate:56031

SQL0623N

表 名称 上已存在集群索引。 CREATE INDEX 语句将在指定的表上创建第二个集群索引。 给定的表只能有一个集群索引。

无法执行该语句。

检查以确定表 名称 上的现有集群索引的标识和有效性。 考虑创建不具有 CLUSTER 属性的索引。

sqlcode:-623

sqlstate:55012

SQL0624N

表 名称 已经具有使用所指定列和时间段的主键或唯一约束。 无法在 ALTER TABLE 语句中定义主键或唯一约束,因为所指示的表已经具有此类型的键或约束。

无法执行该语句。

一个表不能有多个主键。 一个表不能具有与现有约束重复的唯一约束。

sqlcode:-624

sqlstate:42889

SQL0628N

存在涉及 子句类型 子句的多个关键字或有冲突的关键字。 关于为什么可能已诊断到语句的此情况,有几个可能的原因。 原因由 clause-type 的值指示。 可能存在的原因包括:

  • 不能在另外某个关键字所在的语句中指定此关键字。
  • 此关键字可能是关键字序列的组成部分,在该序列中,不强制规定指定这些关键字的顺序。 可能已指定此类序列中的关键字,但还指定了有冲突的关键字。
  • 此关键字可能出现多次并具有不同的关联值。
  • 此关键字可能要求在同一语句中指定其他未指定的特定关键字。
  • 更改 (ALTER) 对象时,指定了与对象的现有属性冲突的关键字。
  • 更改 (ALTER) 分区表时,不支持对任何其他子句执行 ADD、ATTACH 和 DETACH 子句。
  • 使用 LIKE table-name 子句(其中,table-name 指定昵称)来创建 (CREATE) 或声明 (DECLARE) 表时,INCLUDING COLUMN DEFAULTS 子句没有任何作用,并且不会复制列缺省值。
  • 已使用参数方式 OUT 或 INOUT 来定义函数中的某个参数,但该函数不支持 OUT 或 INOUT 参数。
  • 使用带 RETURNS GENERIC TABLE 子句的 CREATE PROCEDURE 语句创建了通用表函数,并且发生了下列其中一个错误:
    • 使用 LANGUAGE 子句指定了 JAVA 以外的语言
    • 使用 PARAMETER STYLE 子句指定了 DB2GENERAL 以外的参数样式
  • 创建触发器时,多次指定了同一触发器事件。
  • 创建表空间时,不能对 DMS 或 SMS 表空间使用“USING STOGROUP”子句
  • 创建表空间时,不能对临时自动存储器表空间更改 STOGROUP
  • 创建表空间时,不能为临时表空间设置 DATA TAG
  • 创建表空间时,不能为系统目录表空间设置 DATA TAG
  • 创建或改变表时,不能为 as-result-table 或 materialized-query-definition 指定附带 LIKE 的 VERSIONING。
  • 变更使用随机依据生成方法的随机分发表时,DROP DISTRIBUTION 子句不受支持。
检查语句是否符合为该语句定义的语法及规则。 更正出现的任何无效的重复或冲突关键字。

sqlcode:-628

sqlstate:42613

SQL0629N

不能指定 SET NULL,因为列或 FOREIGN KEY 名称 不能包含空值。 ALTER TABLE 语句或指示的 FOREIGN KEY 子句的 SET NULL 选项无效。 对于 ALTER TABLE 语句,不能将列 名称 改变为不允许空值,因为此列是外键约束中操作类型为“on delete set NULL”的最后一个可空的列。

对于 FOREIGN KEY 子句,键的任何列都不允许空值。 名称 是约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

对于 ALTER TABLE 语句,移除外约束或者至少将此约束中的其他一列更改为可空。 对于 FOREIGN KEY 子句,更改键的列以允许指定空值,或更改删除规则。

sqlcode:-629

sqlstate:42834

SQL0631N

FOREIGN KEY 名称 太长,或带有太多列。 在 CREATE TABLE 语句中,FOREIGN KEY 子句中标识的列内部长度之和超出索引键长度限制,或者标识的列数超过 64。 并且,不能使用 LONG VARCHAR 列定义外键。

名称 是 FOREIGN KEY 子句中的约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

 

索引键长度限制基于索引使用的表空间的页大小:

最大密钥长度 页面大小 ————– ——— 1K 4K 2K 8K 4K 16K 8K 32K

 

无法处理该语句。

要修改外键定义,可消除一个或多个键列并遵循 64 列这一限制以及键长度限制。

sqlcode:-631

sqlstate:54008

SQL0632N

FOREIGN KEY name 无效,因为删除规则限制(原因代码 = 原因代码)不能将表定义为表 table-name 的从属表。

因为 CREATE TABLE 或 ALTER TABLE 语句的对象表因下列其中一种原因码而不能定义为表 表名 的从属表,所以不能定义引用约束:

  • (01) 该关系是自引用关系,但已存在具有 SET NULL 删除规则的自引用关系。
  • (02) 这种关系形成两个或多个表的循环,这将导致此表与其自身的连接被删除(循环中的所有其他删除规则都将是 CASCADE)。
  • (03) 这种关系将导致经过多个关系的表到指定的表的连接被删除,现有关系的删除规则是 SET NULL。

导致错误的是现有关系的删除规则,而不是 CREATE TABLE 或 ALTER TABLE 语句的 FOREIGN KEY 子句中指定的删除规则。

名称 是 FOREIGN KEY 子句中的约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

如果可能,从 CREATE TABLE 或 ALTER TABLE 语句消除特定的 FOREIGN KEY 子句。

sqlcode:-632

sqlstate:42915

SQL0633N

FOREIGN KEY 名称 的删除规则必须为 删除规则(原因码:原因码)。

在 CREATE TABLE 或 ALTER TABLE 语句的 FOREIGN KEY 子句中指定的删除规则无效。 由于下列其中一种原因码,指示的删除规则是必需的:

  • (01) 引用约束是自引用的并且现有的自引用约束具有指示的删除规则 (NO ACTION、RESTRICT 或 CASCADE)。
  • (02) 引用约束是自引用的并且表依赖于带有删除规则 CASCADE 的关系。
  • (03) 这种关系将导致经过多个关系的表到同一表的连接被删除,而这种关系必须具有同一删除规则(NO ACTION、RESTRICT 或 CASCADE)。

名称 是 FOREIGN KEY 子句中的约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

如果有可能,更改删除规则。

sqlcode:-633

sqlstate:42915

SQL0634N

FOREIGN KEY 名称 的删除规则不能是 CASCADE(原因码:原因码)。

CREATE TABLE 或 ALTER TABLE 语句的 FOREIGN KEY 子句中指定的 CASCADE 删除规则因下列其中一个原因码而无效:

  • (01) 存在遵循 SET NULL、NO ACTION 或 RESTRICT 删除规则的自引用约束。
  • (02) 这种关系将形成一个循环,这将导致表到与其自身的连接被删除。 循环中其中一个现有的删除规则不是 CASCADE,所以如果该删除规则不是 CASCADE,那么此关系可能是可定义的。
  • (03) 这种关系将导致经过多个路径的另一个表到同一表的连接被删除,这些路径带有不同的删除规则或带有等于 SET NULL 的删除规则。名称 是 FOREIGN KEY 子句中的约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。

如果有可能,更改删除规则。

sqlcode:-634

sqlstate:42915

SQL0636N

为数据分区 分区名 指定的范围无效。 原因码:原因码 由于下列其中一个原因码所指示的原因,使得为分区键指定的范围无效:

1
分区的 STARTING 值大于 ENDING 值。 通常,一个分区的 STARTING 值必须小于 ENDING 值。 但是,如果开始值和结束值都包括在内,那么开始值可以等于(EQUAL)结束值。 包括 MINVALUE 或 MAXVALUE 的范围不包括在内。 例如,定义为 STARTING (1, MINVALUE) ENDING (1, MINVALUE) 的分区是非法的(原因码为 1)。 因为这些范围值相等,并且都不包括在内。 即使只显式指定了一个范围(例如,仅指定了 STARTING 范围),但是,如果(在生成缺少的范围之后)获得的范围违反了此规则,也将返回此原因码。
3
没有为具有最低键的分区指定 STARTING 值。
4
没有为具有最高键的分区指定 ENDING 值。
5
当未指定前一个 ENDING 值时,未指定 STARTING 值。
7
仅在 DB2 UDB for iSeries 上:未按递增顺序指定数据分区。
9
分区的 STARTING 或 ENDING 值太长。 表分区键限制值的总长度必须小于或等于 512 字节。
10
该范围将覆盖另一个分区。 每个数据分区必须具有严格定义的开始边界和结束边界,并且每个数据值都必须进入一个并且只进入一个数据分区。 而且,如果在一个分区的结束范围和下一个分区的开始范围内使用了同一个值(MINVALUE 或 MAXVALUE 除外),那么这两个范围中至少有一个范围被定义为 EXCLUSIVE。 对于现有的表,要确定一个分区的范围是 INCLUSIVE 还是 EXCLUSIVE,可按如下所示查询 SYSCAT.DATAPARTITIONS 目录表(替换 ‘table-schema’ 和 ‘table-name’ 的适当值):

SELECT
DATAPARTITIONID, DATAPARTITIONNAME,
LOWINCLUSIVE, LOWVALUE, HIGHINCLUSIVE,
HIGHVALUE
FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA='table-schema'
AND TABNAME='table-name'
ORDER BY SEQNO
11
当指定了 EVERY 子句时,就不能指定 MINVALUE 和 MAXVALUE。
12
为 EVERY 子句指定的值必须大于零,并且要足够大以便定义唯一分区。
13
不能在一个分区的 STARTING 或 ENDING 值中的 MINVALUE 或 MAXVALUE 后面指定常量。 一旦指定了 MINVALUE 或 MAXVALUE,所有后续的(不太重要)列必须分别为 MINVALUE 或 MAXVALUE。
14
当指定了 EVERY 子句时,不能将十进制浮点特殊值指定为起始范围、结束范围或增量。
15
分区的 STARTING 值和 ENDING 值不能为空值。 注意,当 varchar2_compat 数据库配置参数设置为 ON 时,长度为零的字符串值将被视为空值。

如果 分区名 的值的格式为“PARTITION=value”,那么在发生错误时该分区名不可用。 所提供的值将标识分区列表子句中出错的分区的开始值或结束值。

无法处理该语句。

更正数据分区的无效范围。

sqlcode:-636

sqlstate:56016

SQL0637N

所使用的关键字 关键字 无效。 对于带有指示关键字的子句,SQL 语句包含重复的或冲突的规范。 例如:

  • 在列定义中只可指定一次 DEFAULT、UNIQUE 和 PRIMARY
  • 不能对同一列定义同时指定 UNIQUE 和 PRIMARY
  • 在 CREATE TABLE 语句中只可指定一次 PRIMARY
  • 对 PREPARE 语句指定的属性字符串不能多次指定一个选项,否则会存在冲突的选项
  • ACTIVATE 或 DEACTIVATE ROW ACCESS CONTROL 只能指定一次
  • ACTIVATE 或 DEACTIVATE COLUMN ACCESS CONTROL 只能指定一次

无法处理该语句。

根据重复或冲突子句的规范更正语句。

sqlcode:-637

sqlstate:42614

SQL0638N

因为未指定列定义,所以不能创建表 名称 CREATE TABLE 语句不包含任何列定义。

无法处理该语句。

将一个或多个列定义添加至该语句。

sqlcode:-638

sqlstate:42601

SQL0644N

在语句 statement-type 中为关键字 keyword 指定的值无效。 关键字 关键字 后面跟随着 语句类型 的描述允许的无效值。 对于数值,该值可能超过定义的范围。 对于其他类型,该值不在有效值的定义集中。 根据 语句类型 的引用文档来确定哪些是有效值并进行适当的更改。

sqlcode:-644

sqlstate:42615

SQL0647N

缓冲池 缓冲池名 当前不活动。 缓冲池 缓冲池名 在当前数据库环境中不活动。 尝试查找另一页大小相同的缓冲池,但在当前数据库环境中没有这样的活动缓冲池。 缓冲池 缓冲池名 是最近定义的,但尚未激活。

无法处理该语句。

必须停止并再次启动该数据库,以激活所需的缓冲池。

sqlcode:-647

sqlstate:57003

SQL0648N

不能定义外键,因为它将导致经过多个路径的表 所有者-1.表名-1 到表 所有者-2.表名-2 的连接被删除。 原因码 = reason-code

因为下列其中一种原因码:原因码,所以不能定义外键:

01
这种关系将导致经过多个路径的表 所有者-1.表名-1 到表 所有者-2.表名-2 的连接被删除,这些路径具有相同的删除规则 SET NULL。
02
这种关系将导致经过多个路径的表 所有者-1.表名-1 到表 所有者-2.表名-2 的连接被删除,这些路径具有不同的删除规则。

SQL 语句的处理已结束。

更正该语句。 再次尝试。

sqlcode:-648

sqlstate:42915

SQL0650N

未执行 ALTER 语句。 原因码:原因码 无法按指定的方式对索引或表执行 ALTER 语句。

原因码更具体地指示了问题根源:

23
不能改变下列索引的压缩:MDC 或 ITC 块索引、全局临时表索引、生成的范围集群表索引以及索引规范。
30
已尝试变更延迟表 SYSTOOLS.REPL_MQT_LATENCY。
31
尝试将影子表的基本表中的列更改为影子表的基本表中不支持的数据类型。
32
尝试变更以下其中一个系统隐藏列:支持跟踪行修改的表的 SYSROWID、CREATEXID 或 DELETEXID 列。
按照原因码的指示更正 ALTER 语句以避免出现限制,然后再次发出该语句。

sqlcode: -650

sqlstate: 56090

SQL0658N

语句失败,这是因为不能显式删除、变更或替换名为 name 的对象。 尝试显式变更或显式删除 ALTER 语句或 DROP 语句不支持的对象时,将返回此消息。

  • 限制显式变更的对象包括已声明为 LANGUAGE SQL 的函数以及有源函数。 限制显式删除的对象包括缺省行许可权。

当由于间接依赖性或其他错误(其中包括以下示例)而不能显式变更、删除或替换对象时,也会返回此消息:

  • 删除对象失败,这是因为该对象由系统隐式创建。 对象示例:
    • 发出 CREATE TYPE 语句时生成的强制转型函数或比较函数
    • 为了与 SQL 过程配合使用而创建的软件包
  • 尝试在指定视图名称的情况下发出带有 OR REPLACE 子句的 CREATE VIEW 语句,但该视图是为了与基于表达式的索引配合使用而创建的。
  • 尝试使用 DROP THRESHOLD 语句来删除工作操作集的上下文中定义的阈值。
  • 尝试变更昵称以禁用高速缓存,但具体化查询表定义的全查询引用了该昵称。
通过执行以下故障诊断步骤对此错误作出响应:

  • 复查与运行时标记 name 中指定的对象相关的 ALTER 语句限制。 对于不能使用 ALTER 语句显式变更的对象,请删除这些对象,然后重新创建并进行所需更改。
  • 要删除系统生成的对象,请删除已导致创建这些系统生成的对象的对象。
  • 要删除工作操作集的上下文中定义的阈值,请使用 ALTER WORK ACTION SET 语句或 DROP WORK ACTION SET 语句。
  • 要变更昵称以禁用高速缓存,请从任何具体化查询表定义中移除对该昵称的所有引用。
  • 要删除表的缺省行许可权,请在指定 DEACTIVATE ROW ACCESS CONTROL 子句的情况下发出 ALTER TABLE 语句。

sqlcode:-658

sqlstate:42917

SQL0659N

已超出表对象的最大大小。

构成表的一个或多个对象已达到其最大大小。 构成表的存储器对象是:

  • 数据:这是存储基本列数据处
  • 索引:这是存储表上全部索引处
  • 长数据:这是存储 LONG VARCHAR 和 LONG VARGRAPHIC 列数据处
  • Lob/Lob 分配:这是存储 BLOB、CLOB 和 DBCLOB 列数据及控制信息处
  • XML:这是 XML 数据的存储位置。

一旦存储器对象已增大至其最大大小,那么不能再进一步扩充。

要使对象内的现有空间可用于存储新数据,可执行下列操作:

  • 重组表
  • 删除表中不必要的行
  • 删除表中的索引
  • 更新行以减少数据量(为了回收未使用的存储器,在此操作后可能需要重组)
  • 删除不需要的 XML 文档

sqlcode:-659

sqlstate:54032

SQL0663N

分区值的数目对于数据分区 分区名 不正确。 在数据分区的 STARTING 或 ENDING 子句中指定的数据分区键限制值的数目不正确。 如果数据分区规范中包含一个 EVERY 子句,那么必须只有一个表分区键列具有 numeric 或 datetime 数据类型。 如果 分区名 的值的格式为“PARTITION=value”,那么在发生错误时该分区名不可用。 所提供的值将标识分区列表子句中出错的分区的开始值或结束值。 将在 STARTING 或 ENDING 子句中指定的值的数目与表分区键中的列数相匹配。 或者,更改表分区键中的列数。

sqlcode:-663

sqlstate:53038

SQL0667N

因为表包含带有外键值的行,而在父表的父键中找不到这些外键值,所以不能创建 FOREIGN KEY 名称 因为正在改变的表有最少一行中的外键与父表中的父键值不匹配,所以指示的外键的定义失败。

名称 是约束名(如果指定)。 如果未指定约束名,那么 名称 是 FOREIGN KEY 子句的列列表中指定的第一个列名,后跟三个句点。

无法处理该语句。 未改变指定的表。

移除错误的表行并定义外键。

sqlcode:-667

sqlstate:23520

SQL0668N

不允许对表 table-name 进行原因代码 reason-code 的操作。 限制对表 表名 的访问。 原因基于下列原因码 原因码

1
可以在多种场景中返回原因码 1,包括以下示例:

  • 该表处于“设置完整性暂挂无访问”状态,这表示未强制表的完整性并且表的内容可能是无效的。
  • 如果从属表处于“设置完整性暂挂无访问”状态,那么对于未处于“设置完整性暂挂无访问”状态的父表或基础表执行的操作也可能会接收到此错误。
  • 尝试针对用户维护的具体化查询表发出 SET INTEGRIT 语句,而不指定 IMMEDIATE UNCHECKED 子句。
2
表处于“无数据移动”状态。 当处于此状态时,禁止导致数据移动的操作。 数据移动操作包括 REDISTRIBUTE、更新数据库分区键、更新多维集群键、更新范围集群键、更新表分区键以及 REORG TABLE。
3
表处于“装入暂挂”状态。 先前尝试装入 (LOAD) 此表失败。 在重新启动或终止 LOAD 操作之前不允许对表进行访问。
4
表处于“读访问”状态。 此状态可能会在联机装入 (LOAD) 处理(带有 READ ACCESS 选项的 LOAD INSERT)期间发生;也可能在联机装入 (LOAD) 操作之后,但在使用 SET INTEGRITY 语句对表的新追加部分验证所有约束之前发生。 如果在使用 SET INTEGRITY 语句关闭完整性检查时使用了 READ ACCESS 子句,那么也可能会出现此状态。 不允许对此表的更新活动。
5
表处于“正在装入”状态。 LOAD 实用程序当前对此表进行操作,直到 LOAD 完成才允许访问。
6
不能在 DB2 Enterprise Server Edition 中刷新引用昵称的具体化查询表。
7
表处于“REORG 暂挂”状态。 在执行包含 REORG 建议的操作的 ALTER TABLE 语句后,可能会发生这种情况。
8
表处于“改变暂挂”状态。 当在包含 REORG 建议的操作的 ALTER TABLE 语句所在工作单元中使用该表时,就可能会发生这种情况。
9
表处于“重新分发暂挂”状态。 REDISTRIBUTE 实用程序未完成对此表的操作,直到 REDISTRIBUTE 完成才允许访问。
10
该表是正在执行的 ADMIN_MOVE_TABLE 操作的源表。 所尝试的操作在移动操作完成或被取消前将受限制。
11
具有非分区索引的表具有新的数据分区,该操作正在尝试在创建了该分区的添加或连接操作所在的事务中访问该分区,但该事务没有以互斥方式来锁定该表。
12
正在访问的提要表目前不可用或处于重建待定状态。 在成功重建表之前,尝试的操作将受到限制。
根据原因码对此错误作出响应:

1
根据表类型,将名为 表名 的表脱离“设置完整性暂挂无访问”状态。

  • 对于用户维护的具体化查询表,执行带有 IMMEDIATE UNCHECKED 选项的语句。
  • 针对非用户维护的具体化查询表,执行带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY 语句。
2
对表 表名 的从属即时具体化查询表和登台表执行 REFRESH TABLE 语句。 可以通过先前的 LOAD INSERT 操作根据 表名 的追加数据以及通过先前带有 ATTACH 子句的 ALTER TABLE 语句根据 表名 的连接数据以增量方式维护这些从属即时具体化查询表和登台表的内容。
3
将该表从“装入暂挂”状态移出。
4
如果由于 LOAD 而出现“读访问”状态,请发出 LOAD QUERY 命令以检查是否正在装入表。 如果是,那么一直等到 LOAD 实用程序完成,或如果有必要,请重新启动或终止先前失败的“装入”操作。 如果当前未在进行 LOAD 操作,那么发出带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY 语句,从而验证表的新装入部分中的约束。

如果因为关闭完整性检查而出现“读访问”状态,请发出带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY 语句。

5
一直等到当前 LOAD 操作完成。 可用使用 LOAD QUERY 命令来监视装入的进度。
6
使用 MAINTAINED BY USER 选项定义具体化查询表。 然后,使用带有子查询的 INSERT 语句填充具体化查询表。
7
使用 REORG TABLE 命令对表进行重组。

注意,对于处于 REORG 暂挂状态的表,重组表时不允许使用下列子句:

  • INPLACE REORG TABLE 子句
  • 对于分区表,如果对该表定义了非分区索引,那么不允许使用 ON DATA PARTITION 子句
8
完成该工作单元,然后重新发出该命令。
9
如果 REDISTRIBUTE 实用程序在工作,请等待直到它完成对当前表的处理。 可使用 LIST UTILITIES 命令来监视 REDISTRIBUTE 实用程序的进度。 如果先前的 REDISTRIBUTE 操作失败并且使表处于此状态,请再次发出 REDISTRIBUTE 实用程序并指定 CONTINUE 或 ABORT 选项,然后让它完成对此表的处理。
10
完成或取消表移动操作,然后重新发出该命令。 您可以查询 SYSTOOLS.ADMIN_MOVE_TABLE 表,以了解有关移动操作状态的信息。
11
修改应用程序,以便在应用程序访问其中目标表具有非分区索引的新分区之前落实包含添加或连接分区操作的事务。 或者,修改应用程序,以便在创建了新分区的添加或连接操作所在的事务中访问该分区时,以互斥方式锁定具有非分区索引并受到联机添加或连接操作影响的表。
12
要启用该表,请使用 REORG SYNOPSIS FOR TABLE base_table REBUILD 命令重建该表。

sqlcode:-668

sqlstate:57007

SQL0669N

不能显式删除系统所必需的索引。 DROP INDEX 语句尝试删除下列操作所需的索引:

  • 强制对表使用主键约束
  • 强制对表使用唯一约束
  • 强制类型表层次结构的对象标识(OID)列具有唯一性
  • 维护复制型具体化查询表
  • 维护表中的 XML 列。
  • 维护 HBase 行键定义

不能使用 DROP INDEX 语句删除系统所必需的索引。

无法处理该语句。 未删除指定的索引。

如果不想保留主键或唯一约束,那么使用 ALTER TABLE 语句的 DROP PRIMARY KEY 子句或 DROP CONSTRAINT 子句来移除主键或唯一约束。 如果索引只是为了对主键或唯一键进行强制而创建的,那么将删除该索引。 否则,可处理 DROP INDEX 语句。

仅可通过删除表来删除 OID 列的索引。

只能通过首先删除复制型具体化查询表来删除维护复制型具体化查询表所需要的索引。

不能显式删除系统需要的、与表中的一个或多个 XML 列相关联的索引。 数据库管理器将维护这些索引,以便支持表中的 XML 列。 如果不删除该表,就不能删除在 DROP INDEX 语句中指定的索引。

对于 HBase 用户,仅当删除了相关联的 HBase 表时,才能隐式删除该索引。

sqlcode:-669

sqlstate:42917

SQL0670N

语句失败,因为生成的表的行大小或列大小超出对应的行大小或列大小限制:限制。 表空间名称:表空间名称。 产生的行大小或列大小:计算大小 表的行大小是列的字节数之和,其中包括所有结构化类型列或 XML 类型列的直接插入长度。 因此,行大小受总列数、LOB 列总数以及列的数据类型影响。

行大小限制是给定表的最大字节数。 此限制由定义的值(在某些情况下)或变量值(取决于表空间页大小)组成。

在按列组织的表中,列大小限制由一个表页可容纳的未压缩列数据值的最大大小构成。

如果尝试使用下列其中一个语句来创建或修改表,那么会返回此消息:

  • CREATE TABLE
  • ALTER TABLE 语句
  • DECLARE GLOBAL TEMPORARY TABLE
  • CREATE GLOBAL TEMPORARY TABLE

如果扩展行大小的多维集群 (MDC) 表具有超过 24 个字节的 VARCHAR、VARGRAPHIC 或 VARBINARY 维键时,那么也会返回此消息。

对按列组织的基本表的更改导致关联概要表超过大小限制时,也可能返回此消息。 如果发生这种情况,那么 限制 标记将指示概要表超出限制。

要解决此消息所报告的问题,请执行下列步骤:

对于行大小限制:

  1. 计算您正尝试创建或修改的表的行大小。
  2. 确定行大小所超出的限制。
    • 对于按行组织的表:此行大小限制由表空间页大小确定。
    • 对于按列组织的表:此限制是按列组织的表的最大行大小。
  3. 请执行下列其中一项操作:
    • 通过减小一个或多个列的长度、指定不同的数据类型或移除一个或多个列来减小行大小。
    • 仅限于按行组织的表:请在语句中指定页大小适合于计算而得的行大小的表空间。
    • 如果无法减少行大小或查找具有更大页大小的表空间,请启用扩展行大小配置参数 extended_row_sz,此参数允许行长度超出表空间的页大小的最大记录长度。

对于列大小限制:

  1. 根据列类型和底层页大小,确定您尝试创建或修改的表的最大列大小。
  2. 缩短受影响列的长度以使其不会超限。

sqlcode:-670

sqlstate:54010

SQL0672N

不允许对表 表名 执行 DROP 操作。 因为下列原因之一使得 DROP 操作失败:

  • 正在删除的表具有 RESTRICT ON DROP 属性。
  • 正在删除的表空间或数据库分区组包含指定的表,这些表具有 RESTRICT ON DROP 属性。

不能执行 DROP 语句。

如果在执行 DROP TABLE 语句期间出现问题,那么发出使用了 DROP RESTRICT ON DROP 子句的 ALTER TABLE 语句。 然后重新发出 DROP TABLE 语句。

如果在执行 DROP TABLESPACE 或 DROP DATABASE PARTITION GROUP 语句期间出现问题,那么确保在表空间或数据库分区组中不存在具有 RESTRICT ON DROP 属性的其他表。 下列 select 语句有助于标识表:


SELECT TB.TABNAME, TB.TABSCHEMA,
       TS.TBSPACE, TS.NGNAME
       FROM SYSCAT.TABLES TB,
            SYSCAT.TABLESPACES TS
       WHERE TYPE = 'T' AND
             DROPRULE = 'R' AND
             TB.TBSPACEID = TS.TBSPACEID
       ORDER BY TS.NGNAME, TS.TBSPACE,
             TB.TABSCHEMA, TB.TABNAME;

标识具有 RESTRICT ON DROP 属性的表之后,对具有 RESTRICT ON DROP 属性的每个表发出使用了 DROP RESTRICT ON DROP 子句的 ALTER TABLE 语句。 然后重新发出 DROP TABLESPACE 或 DROP DATABASE PARTITION GROUP 语句。

sqlcode:-672

sqlstate:55035

SQL0673N

对于标识的约束 名称 的主键列或唯一键列的值,表包含重复的行,所以不能创建主键索引或唯一键索引。 因为正在改变的表已经包含具有 PRIMARY KEY 或 UNIQUE 子句列的重复值的行,所以由 名称 标识的约束的主键或唯一键定义失败。

名称 是约束名(如果指定)。 如果未指定约束名,那么 名称 是主键或唯一约束子句中指定的第一个列名,后跟三个句点。

无法处理该语句。 未改变指定的表。

在尝试定义主键或唯一键之前,从表中移除错误行。

sqlcode:-673

sqlstate:23515

SQL0678N

字面 literal 必须与列 olumn-name 的数据类型 data-type 兼容。 为 STARTING、ENDING 或 EVERY 子句指定的文字 文字 与 列名 列的数据类型不兼容。 该列的数据类型为 数据类型。 在 EVERY 子句中使用的文字的值不能为零或者负数。 当 PARTITION BY 子句指定 datetime 数据类型时,EVERY 子句必须指定一个持续时间。 在 STARTING、ENDING 或 EVERY 子句中指定一个有效文字。

sqlcode:-678

sqlstate:53045

SQL0680N

该语句失败,因为对表、视图、表函数或昵称指定的列过多,或者对用户定义的行数据类型指定的字段过多。 您可以对表定义的最大列数取决于对象的类型。

您可以对视图、表函数或昵称定义的最大列数以及用户定义的行数据类型所允许的最大字段数是在 SQL 和 XML 限制中指定。

对于表,最大列数受所指定的 LOB 列数的影响。 “CREATE TABLE 语句中的行大小限制”一节包括用于计算表的行大小的公式。

对于联合环境中的关系数据库源,昵称也可能受其数据源上表或视图的最大列数的限制(当这些限制小于 SQL 和 XML 限制中指定的限制时)。

对于下列情况,将返回此消息:

  • 尝试对其所包含的列数大于所允许的最大列数的表创建对象(例如表、视图、表函数或昵称)时。
  • 尝试创建其包含的字段数大于所允许的最大字段数的用户定义的行数据类型时。
请确保列数或字段数不超出限制。

要解决此消息所报告的问题,请执行下列类型的故障诊断操作:

  • 创建表
    • 复查数据库管理器 SQL 和 XML 限制。 尤其是要复查特定于页大小的数据库管理器 SQL 和 XML 限制。
    • 重新设计该表以包含较少列、使用除 LOB 之外的其他数据类型以减少行大小,或者指示其页大小允许包含更多列数的表空间,然后再次发出 CREATE TABLE 语句。
  • 对表创建视图或表函数
    • 复查数据库管理器限制,重新设计该表以符合 SQL 限制,然后再次创建视图或表函数。
  • 对联合数据源中的表或视图创建昵称
    • 复查适用于表或视图的数据库管理器限制及数据源 SQL 限制,重新设计昵称以符合这些限制,然后再次创建该昵称。
  • 创建行数据类型
    • 复查 SQL 和 XML 限制,重新设计数据类型以包含较少字段(从而符合 SQL 限制),然后再次创建行数据类型。

sqlcode:-680

sqlstate:54011

SQL0683N

列、属性、用户定义的类型或函数 数据项 的规范包含不兼容的子句。 CREATE 语句、ALTER 语句、XMLTABLE 表达式或者引用一般表函数的 SELECT 语句的 typed-correlation 子句中的数据项规范出错。 存在不兼容的规范,例如:“INTEGER 和 FOR BIT DATA”。 如果列的类型为 DB2SECURITYLABEL,那么不兼容的指定内容包括 NOT NULL WITH DEFAULT。 错误的位置由 数据项 给出,如下所示:

  • 对于 CREATE TABLE 语句、ALTER TABLE 语句、XMLTABLE 表达式或者 SELECT 语句的 typed-correlation 子句,数据项 提供包含错误的列的名称。
  • 对于 CREATE FUNCTION 语句,数据项 是标识语句中的问题区的标记。 例如,“PARAMETER 3”或“RETURNS”或“CAST FROM”。
  • 对于 CREATE DISTINCT TYPE 语句,数据项 提供正在定义的类型的名称。
  • 对于 CREATE 或 ALTER TYPE 语句,数据项 标识包含错误的子句,或者提供包含错误的属性的名称。
  • 对于 CREATE 或 ALTER TABLE 语句,必须将 BUSINESS_TIME 时间段的列定义为 DATE 或 TIMESTAMP(p),其中 p 是 0 到 12 的数(包括 0 和 12)。
  • 对于 CREATE 或 ALTER TABLE 语句,“行开始”列、“行结束”列或“事务开始标识”列的 数据项 必须为 TIMESTAMP(12)。
  • 对于 ALTER TABLE 语句,不能对使用随机依据生成方法的随机分发表的随机分发键列指定带有 COMPRESS OFF 或 COMPRESS SYSTEM DEFAULT 的 ALTER COLUMN。

无法处理该语句。

移除不兼容情况并再次尝试运行该语句。

sqlcode:-683

sqlstate:42842

SQL0695N

无法将提供的值(安全标号)转换为安全标号。 在策略标识为 策略标识 的安全策略中,元素值 元素值 未与序数位置为 序数 的组件中的任何元素相对应。 INSERT 或 UPDATE 语句对类型为 DB2SECURITYLABEL 的列指定了值。 无法将该值转换为对保护该表的安全策略而言有效的安全标号。 如果 安全标号 值为 *N,那么表示已将实际值写入 db2diag 日志文件。

在组件号指示的组件中,值有问题。 序数位置是指该组件在用来创建该策略的 CREATE SECURITY POLICY 语句的 COMPONENTS 子句中的位置。 指示的元素值未与该组件中的有效元素相对应。

检查 INSERT 或 UPDATE 语句,确保在安全标号列中设置的值对于用来保护表的安全策略而言有效。 有时,在对一个表执行 SELECT,而用于保护该表的安全策略与用于保护目标表的安全策略不同时,可能会生成无效值。 只应该在受同一安全策略保护的表之间复制安全标号。

要获取给定策略标识的安全策略名,请使用此 SQL 查询。 请将策略标识替换为错误消息中给出的策略标识号。

SELECT SECPOLICYNAME
         FROM  SYSCAT.SECURITYPOLICIES
          WHERE SECPOLICYID = policy-id

sqlcode:-695

sqlstate:23523

SQL0696N

触发器 触发器名 的定义包括相关名或转换表名 名称 的无效使用。 原因码 =Reason-code 触发器定义中无效使用了 名称。 原因码 值标识以下问题:

1
如果未使用复合 SQL(编译型)语句定义 DELETE 触发器,那么不允许在此 DELETE 触发器中使用 NEW 相关名和 NEW TABLE 名。
2
如果未使用复合 SQL(编译型)语句定义 INSERT 触发器,那么不允许在此 INSERT 触发器中使用 OLD 相关名和 OLD TABLE 名。
3
不允许在 BEFORE 触发器中使用 OLD TABLE 名和 NEW TABLE 名。
4
如果使用复合 SQL(编译型)语句定义触发器,那么不允许在此触发器中使用 OLD TABLE 名和 NEW TABLE 名。

无法处理该语句。

将无效的相关名或转换表名与前导关键字一起除去。

SQL0697N

在用 FOR EACH STATEMENT 子句定义的触发器中,不允许 OLD 或 NEW 相关名。 如所定义的那样,触发器包括指定了 OLD 相关名或 NEW 相关名(或两者)的 REFERENCING 子句,以及 FOR EACH STATEMENT 子句。 这些不能一起指定。

无法处理该语句。

从 REFERENCING 子句移除任何 OLD 相关名或 NEW 相关名,或者用 FOR EACH ROW 替换 FOR EACH STATEMENT。

sqlcode:-697

sqlstate:42899

SQL0707N

不能使用名称 名称,因为指定的标识是保留给系统使用的。 以下列表提供了有关保留名称和限定符的规则:

  • 表空间名不能以 SYS 开头。
  • 存储器组名不能以 SYS 开头。
  • 数据库分区组名不能以 SYS 或 IBM 开头。
  • 模块名不能以 SYS 开头。
  • 除了模块初始化过程之外,模块中定义的对象的名称不能以 SYS_ 开头。
  • 保存点名不能以 SYS 开头。
  • 角色名不能以 SYS 开头,并且它不能为 ACCESSCTRL、DATAACCESS、DBADM、NONE、NULL、PUBLIC、SECADM、SQLADM 或 WLMADM。
  • 工作负载管理对象名不能以 SYS 开头。
  • 成员子集名称不能以 SYS 开头。
选择未保留的名称。

sqlcode:-707

sqlstate:42939

SQL0713N

专用寄存器 的替换值无效。 SET 语句中指定的值不是所指示的专用寄存器的有效值,指定的值虽然对于专用寄存器有效但是不能用于当前服务器上,或者指定的值是作为指示符变量结果的 NULL。

无法执行该语句。

更正替换值或任何指示符变量。

sqlcode:-713

sqlstate:42815

SQL0719N

用户 授权标识 绑定错误。 程序包 程序包名 已经存在。

尝试使用 PRECOMPILE 或 BIND 的 ACTION ADD 选项来添加已经存在的程序包。 “pkgschema.pgkname.pkgversion”组合在 SYSCAT.PACKAGES 目录视图中必须是唯一的。

授权标识
BIND 或 PREP 调用者的授权标识
程序包名
格式为“pkgschema.pkgname.pkgversion”的程序包的名称。 如果程序包版本是空字符串,那么名称省略“.pkgversion”。

未创建程序包。

确保没有添加重复条目的企图的方法包括:

  • 检查 SYSCAT.PACKAGES 目录视图以了解现有应用程序的程序包的名称。 使用未在使用的“pkgschema.pkgname.pkgversion”重新调用 PRECOMPILE 或 BIND。
  • 重新发出 PREP 或 BIND 语句而不带 ACTION ADD 选项。 这将替换现有的程序包。

sqlcode:-719

sqlstate:42710

SQL0720N

试图用版本 pkgversion 替换 pkgschema.pkgname 软件包,而该版本已经存在。 尝试使用 ACTION REPLACE REPLVER 选项创建已经存在的版本的程序包。 REPLVER 关键字中指定的版本与 VERSION 预编译选项中指定的版本不同。 VERSION 预编译选项中指定的版本已经存在于目录中。 “pkgschema.pkgname.version”组合在 SYSCAT.PACKAGES 目录视图中必须是唯一的。

常见错误是用户可能相信正在创建的版本就是 REPLVER 关键字中指定的版本。 但情况并非如此。 在 REPLVER 关键字中指定的版本是正在替换的版本的名称。 将要创建的版本是在 VERSION 选项中给予程序的版本。

未创建程序包。

确保正在创建的版本不存在。

有两种方法可以解决此问题:

  • 以新版本名再次预编译程序并重新发出原始 PREP 或 BIND 命令。
  • 另一方法是重新发出 PREP 或 BIND 命令指定 ACTION REPLACE 子句而不带 REPLVER 规范。 在此情况下,REPLACE 将替换与在 VERSION 选项中指定的版本相匹配的版本。

sqlcode:-720

sqlstate:42710

SQL0721N

由于不唯一,无法创建一致性标记 = 0X预示符 的包 pkgschema.pkgname 。 尝试使用对程序包不是唯一的一致性标记添加或替换程序包。 组合“pkgschema.pkgname.contoken”已经存在。 这最有可能是由于使用 PRECOMPILE 的 LEVEL 选项来指定一致性标记导致的。

未创建程序包。

检查 SYSCAT.PACKAGES 目录表以获取带有指示的一致性标记的现有应用程序的程序包的名称。 重新发出 PREP 或 BIND 命令以便“pkgschema.pkgname.contoken”在目录中是唯一的。 可以使用下列 SQL 语句来查询目录:

SELECT PKGSCHEMA,PKGNAME
FROM SYSCAT.PACKAGES
WHERE HEX(UNIQUE_ID) = 'contoken'; 

如果使用预编译上的 LEVEL 选项,那么重新发出预编译并指定另一 LEVEL 值将更改一致性标记。 建议不要使用 LEVEL 选项;不指定预编译的 LEVEL 选项将确保一致性标记是当前时间戳记值。

SQL0722N

为用户 auth-id 执行 绑定命令时出错。 程序包 程序包名 不存在。

针对不存在的程序包发出了绑定或重新绑定。 如果指定了 ACTION REPLACE 并且 REPLVER 选项指定了不存在的版本,那么将发生错误。

绑定命令
发出了绑定命令类型(BIND | REBIND)。 注意值“BIND”也将用于预编译。
授权标识
发出绑定或重新绑定的授权标识。
程序包名
格式为“pkgschema.pkgname.pkgversion”的程序包的名称。 如果程序包版本是空字符串,那么名称省略“.pkgversion”。

未绑定或重新绑定程序包。

SQL0723N

触发器 触发器名 中触发 SQL 语句出错。 对该错误返回的信息包括 SQLCODE sqlcode、SQLSTATE sqlstate 和消息标记 标记列表 在触发器 触发器名 的执行期间,该触发器中的 SQL 语句失败。 提供了 sqlcode、sqlstate 和消息标记列表(每个标记由竖线字符分隔)。 消息标记可能被截断。 请参阅 sqlcode 的相应消息以获取该错误的进一步解释。

不能处理触发器和导致执行触发器的原始 SQL 语句。

检查与失败的 SQL 语句的 SQLCODE 相关联的消息。 遵循该消息所建议的操作。

sqlcode:-723

sqlstate:09000

SQL0724N

类型为 object-type 的 object-name 的激活将超过间接 SQL 级联的最大级别。 当触发器激活另一触发器(可能通过引用约束删除规则)或包含 SQL 的例程调用另一例程时发生间接 SQL 级联。 此级联的深度限制对于触发器为 16,对于例程为 64。

注意以下递归情况:触发器包括直接或间接导致激活相同触发器的触发 SQL 语句,或例程直接或间接调用它本身,这是一种级联形式,如果没有防止级联超出限制的条件,它很可能导致此错误。

对象类型 是 TRIGGER、FUNCTION、METHOD 或 PROCEDURE 的其中之一。

指定的对象名 是将已经在级联的第七级别激活的对象之一。

启动由接收到此错误的语句激活或调用的对象。 如果其中一个对象是递归的,那么确保存在防止激活或调用对象超过限制允许的条件。 如果这不是问题的原因,那么跟踪激活或调用的对象的链以确定超出级联限制的链。

sqlcode:-724

sqlstate:54038

SQL0727N

隐式系统操作类型 操作类型 期间出错。 对该错误返回的信息包括 SQLCODE sqlcode、SQLSTATE sqlstate 和消息标记 标记列表 语句或命令的处理导致了数据库管理器隐式执行附加处理。 处理期间遇到错误。 操作类型 显示了尝试的操作:

1
程序包的隐式重新绑定
2
隐式预编译高速缓存的动态 SQL 语句
3
隐式重新验证对象
4
此返回码保留给 DB2 使用。
5
静态 SQL 语句的增量绑定,在程序包绑定时间内没有绑定
6
隐式预编译包含主机变量、专用寄存器或参数标记的可重新优化的语句。
7
隐式重新生成触发器
8
隐式重新生成函数
9
隐式重新生成检查约束
10
对全局变量的隐式实例化
11
隐式调用模块初始化例程
12
隐式验证,用来验证在变更列数据类型之后数据是否符合完整性约束
13
隐式验证,用来验证在变更列数据类型之后现有生成表达式列值是否等于生成表达式

提供了 sqlcode、sqlstate 和消息标记列表(每个标记由竖线字符分隔)。 消息标记可能被截断。 请参阅 sqlcode 的相应消息以获取该错误的进一步解释。

不能处理导致 操作类型 的原始 SQL 语句或命令,隐式系统操作不成功。

联合系统用户:您可能已经接收到此消息,因为您在传递会话中动态地预编译了 SQL 语句,然后尝试了在关闭该会话之后执行该语句。

检查与失败的 SQL 语句的 SQLCODE 相关联的消息。 遵循该消息所建议的操作。

对于无效程序包,可以使用 REBIND 命令在解析错误原因后重新创建错误或显式验证程序包。

对于重新验证数据库对象时发生的故障:

  1. 通过在管理通知日志中查找重新验证故障消息,确定无法重新验证的数据库对象的名称。
  2. 为了避免将来发生此错误,您可以执行下列其中一项操作:
    • 如果不再需要引起此错误的数据库对象,请删除该数据库对象。
    • 如果可以更改导致此数据库对象被重新验证的语句或命令,请更改该语句或命令,以便下次执行该语句或运行该命令时,不会重新验证该数据库对象。
    • 现在,通过执行下列其中一项操作,重新验证该数据库对象:
      • 执行直接引用该数据库对象的 SQL 语句。
      • 对该数据库对象调用 ADMIN_REVALIDATE_DB_OBJECTS 过程。

联合系统用户:如果失败的语句是在传递会话中动态预编译的,那么打开另一个传递会话,再次编写并预编译该语句,并在会话仍然打开时执行该语句。

sqlcode:-727

sqlstate:56098

SQL0740N

例程 例程名(特定名称 特定名称)是使用 MODIFIES SQL DATA 选项定义的,该选项在调用例程的上下文中无效。 例程 例程名(特定名称 特定名称)是使用 MODIFIES SQL DATA 定义的,所以在下列情况不被允许:

  • 未使用复合 SQL(编译型)语句定义的 BEFORE 触发器
  • 相关子查询
  • 搜索条件(例如 WHERE 子句或检查约束)

模块函数以及定义时指定了 MODIFIES SQL DATA 选项并且包含复合 SQL(编译型)语句作为函数体的函数只能是复合 SQL(编译型)语句中赋值语句右侧的唯一表达式。

确保例程解决方案解析为期望的例程。 将例程从失败的语句移除或以不同于 MODIFIES SQL DATA 的 SQL 访问指示符重新定义例程。

sqlcode:-740

sqlstate:51034

SQL0746N

名为 routine-name 的例程(具体名称 specific-name )失败,原因是该例程在尝试对名为 table-name 的表执行操作 operation 时违反了嵌套 SQL 语句规则。 当应用程序调用例程时,如果该例程在访问表时尝试采用的方式与该应用程序或由该应用程序直接或间接调用的例程对表的其他使用有冲突,那么会返回此消息。

标记 操作 的值指示该冲突的性质:

  • 如果操作是“READ”,那么表 表名 当前正由该应用程序或另一例程写入。
  • 如果操作是“MODIFY”,那么表 表名 已由该应用程序或另一例程读取或写入。

有多种情况可能会返回此消息:

  • 如果 表名 引用说明表并且接收到此错误消息的语句是 PREPARE 语句或 EXECUTE IMMEDIATE 语句,那么在将说明信息插入说明表中时发生冲突。
  • 对于先前已在最外面的调用语句的上下文中修改的表,当触发器尝试调用访问这些表的存储过程时,可能会返回此消息。 可以使用 DB2_RESOLVE_CALL_CONFLICT 注册表变量,以强制在执行 CALL 语句之前按照触发器的 SQL 标准规则来完成对表的所有修改。
再次尝试执行该操作。

如果该操作仍然由于此错误而失败,请执行下列步骤以避免发生此错误:

  • 重新设计应用程序或例程以避免冲突。
  • 如果在插入动态语句的说明信息时发生冲突,请通过使用 CURRENT EXPLAIN MODE 专用寄存器来禁用动态语句的说明,然后再次执行 PREPARE 语句或 EXECUTE IMMEDIATE 语句。
  • 对于先前已在最外面的调用语句的上下文中修改的表,如果在触发器尝试调用访问这些表的存储过程时返回了此消息,请将 DB2_RESOLVE_CALL_CONFLICT 注册表变量设置为 YES。

sqlcode:-746

sqlstate:57053

SQL0750N

此语句失败,因为无法重命名表或列。 由于下列其中一个或多个原因,不能重命名 RENAME 语句中的源表。

  • 在一个或多个现有具体化查询表中引用了该表。
  • 在一个或多个统计视图中引用了该表。
  • 该表涉及一个或多个作为父表或从属表的引用约束。
  • 该表是用于分解一个或多个 XSR 对象的目标表。
  • 该表是系统时间段时间表。
  • 该表是历史记录表。
  • 数据库管理器配置参数 auto_reval 设置为 DISABLED,并且发生下列其中一种情况:
    • 在一个或多个现有视图中引用了该表。
    • 在一个或多个现有触发器中引用了该表。 这包括表上的触发器或已触发的 SQL 语句中的引用。
    • 在一个或多个现有 SQL 函数或 SQL 方法中引用了该表。
    • 该表已定义了检查约束。 这包括由生成列导致的检查约束。
  • 该表为延迟表 SYSTOOLS.REPL_MQT_LATENCY。
  • 该表已有注册空间列。
  • 表具有基于表达式的索引,使用表名限定了一个或多个列引用。

由于下列其中一个或多个原因,无法重命名 ALTER TABLE 语句中的目标表列。

  • 目标表为历史记录表
  • 该列是使用随机依据生成方法的随机分发表的随机分发键列
如果错误与 RENAME 语句有关,那么在发出 RENAME 语句之前,请删除依赖于该表的视图、具体化查询表、触发器、SQL 函数、SQL 方法、检查约束、引用约束或 XSR 对象,然后重新创建基于表达式的索引,而不显式引用表名。 可以通过查询目录来确定依赖于此表的对象。

  • 对于依赖于此表的视图、基于表达式的索引或具体化查询表,请查询 SYSCAT.VIEWDEP 并使表与 BSCHEMA 和 BNAME 列相匹配。
  • 对于依赖于此表的触发器,请查询 SYSCAT.TRIGDEP 并使表与 BSCHEMA 和 BNAME 列相匹配。
  • 对于 SQL 函数或 SQL 方法,请查询 SYSCAT.ROUTINEDEP,其中的表与 BSCHEMA 和 BNAME 列相匹配。
  • 对于表的检查约束,请查询 SYSCAT.CHECKS,其中的表与 TABSCHEMA 和 TABBNAME 列相匹配。
  • 对于带有注册空间列的表,请注销空间列。
  • 对于依赖于此表的引用约束,请查询 SYSCAT.REFERENCES,其中的表与 TABSCHEMA 和 TABNAME 列或者 REFTABSCHEMA 和 REFTABNAME 列相匹配。
  • 对于为了进行将此表作为目标的分解而启用的 XSR 对象,请查询 SYSCAT.XSROBJECTDEP,其中的表与 BSCHEMA 和 BNAME 列匹配。

如果此错误与 ALTER TABLE 语句的 RENAME COLUMN 操作有关,那么在目标表是历史记录表的情况下无法直接重命名此列。 可以通过执行下列其中一个操作来重命名该列。

  • 确定使用历史记录表的系统时间段时间表的名称,发出 RENAME COLUMN 操作并将该名称作为 ALTER TABLE 语句的目标。 这将在系统时间段时间表和相关联的历史记录表中都会重命名此列。
  • 确定系统时间段时间表的名称,发出 DROP VERSIONING 操作并将该名称作为 ALTER TABLE 语句的目标。 这会将历史记录表和系统时间段时间表更改为常规表。 现在,您可以在原始 ALTER TABLE 语句中重命名该表的此列。 请注意,如果已重命名此列,那么此表不再能够是已删除其版本控制的表的历史记录表。

如果某列是使用随机依据生成方法的随机分发表的随机分发键列,那么不需要执行任何操作。 此列是系统生成的列,无法重命名。

sqlcode:-750

sqlstate:42986

SQL0751N

例程 例程名(特定名称 特定名称)尝试执行不被允许的语句。 不允许用于实现例程主体的程序发出任何连接语句。 如果例程是函数或方法,那么不允许 COMMIT 和 ROLLBACK(没有 SAVEPOINT 选项)。 如果例程是过程并且是在触发器、函数、方法或动态复合语句内调用的,那么在该过程中不允许 COMMIT 或 ROLLBACK 语句。 移除不被允许的语句,然后重新编译程序。

sqlcode:-751

sqlstate:38003, 42985

SQL0752N

当使用 CONNECT 类型 1 设置时,不允许在逻辑工作单元内连接数据库。 发出 COMMIT 或 ROLLBACK 语句之前,尝试连接另一个数据库或同一个数据库。 在 CONNECT 1 类环境内不能处理该请求。
  • 在请求连接至另一个数据库前,提交 COMMIT 或 ROLLBACK 语句。
  • 如果在一个工作单元内有多个数据库需要更新,那么通过重新预编译或通过从应用程序内发出 SET CLIENT API,将连接设置更改为 SYNCPOINT TWOPHASE 和 CONNECT 2。

sqlcode:-752

sqlstate:0A001

SQL0773N

找不到 CASE 语句的条件。 在 SQL 例程的例程实体中找到没有 ELSE 子句的 CASE 语句。 未满足 CASE 语句中所指定的任何条件。 更改 CASE 语句以处理可能发生的所有情况。

sqlcode:-773

sqlstate:20000

SQL0774N

语句不能在 ATOMIC 复合 SQL 语句内执行。 在 ATOMIC 复合 SQL 语句的上下文中遇到了 COMMIT 或 ROLLBACK 语句。 在此上下文中不允许这些语句。 移除 COMMIT 或 ROLLBACK 语句或更改上下文以便它不是 ATOMIC 复合语句。

sqlcode:-774

sqlstate:2D522

SQL0776N

游标 游标名 的使用无效。 在 SQL 过程中的 FOR 语句上,游标 游标名 被指定为游标名。 不能在 FOR 语句内的 CLOSE、FETCH 或 OPEN 语句上指定游标。 移除 CLOSE、FETCH 或 OPEN 语句。

sqlcode:-776

sqlstate:428D4

SQL0777N

不允许嵌套复合语句。 不能嵌套 SQL 过程的例程实体中的原子复合语句。 确保 SQL 过程不包含嵌套的原子复合语句。

sqlcode:-777

sqlstate:42919

SQL0778N

结束标号 标号 与开始标号不同。 在 FOR、IF、LOOP、REPEAT、WHILE 或复合语句的末尾指定的标号 标号 与在语句开头的标号不同。 如果未指定开始标号,那么不能指定结束标号。 确保结束标号与 FOR、IF、LOOP、REPEAT、WHILE 及复合语句的开始标号相同。

sqlcode:-778

sqlstate:428D5

SQL0779N

在 GOTO、ITERATE 或 LEAVE 语句上指定的标号 标号 无效。 在 GOTO、ITERATE 或 LEAVE 语句上指定了标号 标号。 标号未定义或对于该语句无效。

ITERATE 语句上的标号必须是 FOR、LOOP、REPEAT 或 WHILE 语句的标号。

LEAVE 语句上的标号必须是 FOR、LOOP、REPEAT、WHILE 或复合语句的标号。

必须在 GOTO 语句可以达到的范围内定义 GOTO 语句的标号。

  • 如果 GOTO 语句是在 FOR 语句中定义的,那么 标号 必须在同一 FOR 语句内定义,但嵌套的 FOR 语句或嵌套的复合语句除外。
  • 如果 GOTO 语句是在复合语句中定义的,那么 标号 必须在同一复合语句内定义,但嵌套的 FOR 语句或嵌套的复合语句除外。
  • 如果 GOTO 语句是在处理程序中定义的,那么 标号 必须在同一处理程序中定义,并遵循其他作用域规则。
  • 如果 GOTO 语句是在处理程序外部定义的,那么 标号 一定不能在处理程序内定义。
在 GOTO、ITERATE 或 LEAVE 语句上指定有效标号。

sqlcode:-779

sqlstate:42736

SQL0780N

当未为复合语句指定 ATOMIC 时,为处理程序指定了 UNDO。 为 SQL 过程的复合语句中的处理程序指定了 UNDO。 除非复合语句是 ATOMIC,否则不能指定 UNDO。 指定复合语句是 ATOMIC,或在处理程序上指定 EXIT 或 CONTINUE。

sqlcode:-780

sqlstate:428D6

SQL0781N

条件 条件名 未定义或者该定义不在作用域内。 在处理程序声明、SIGNAL 语句或 RESIGNAL 语句中指定了条件 条件名,但该条件并非定义于包含条件引用的复合语句的作用域之内,或者该条件无法被识别为已定义的模块条件。

无法处理该语句。

通过在包含条件引用的复合语句中使用 DECLARE CONDITION 语句,或者通过在引用该条件的位置处可视的模块中定义条件来定义该条件。 此外,也可以将条件引用替换为特定的 SQLSTATE 值或者移除引用了该条件的处理程序声明、SIGNAL 语句或 RESIGNAL 语句。

sqlcode:-781

sqlstate:42737

SQL0782N

在处理程序中指定的条件或 SQLSTATE 值无效。

在 SQL 语句的处理程序中指定了条件或 SQLSTATE 值,但是,由于下列其中一种原因使得它们是无效的:

  • 在同一作用域中的另一个处理程序已指定条件或 SQLSTATE 值。
  • 在与 SQLEXCEPTION、SQLWARNING 或 NOT FOUND 相同的处理程序中指定了该条件或 SQLSTATE 值。
  • 在容错的嵌套表表达式的 continue-handler 子句中指定的条件、SQLSTATE 值或 SQLCODE 值无效。
从处理程序中移除该条件、SQLSTATE 值或 SQLCODE 值。

sqlcode:-782

sqlstate:428D7

SQL0783N

在 FOR 语句的 DECLARE CURSOR 语句中指定了重复的列名或未命名的列。 FOR 语句中的选择列表必须包含唯一的列名。 指定的选择列表包含重复的列名或未命名的表达式。 在 FOR 语句中指定的选择列表中指定唯一的列名。

sqlcode:-783

sqlstate:42738

SQL0784N

此语句失败,因为无法删除名为 约束名称 的约束。 对于在定义了 BUSINESS_TIME 时间段的情况下隐式生成的约束,无法使用带有 DROP CHECK 或 DROP CONSTRAINT 子句的 ALTER TABLE 语句将其删除。 从 ALTER TABLE 语句中移除 DROP CHECK 或 DROP CONSTRAINT 子句。 如果您需要删除此约束,可以使用 ALTER TABLE 语句的 DROP PERIOD 子句删除 BUSINESS_TIME 时间段。

sqlcode:-784

sqlstate:42860

SQL0785N

SQLSTATE 或 SQLCODE 变量的声明或使用无效。

SQLSTATE 或 SQLCODE 在 SQL 例程的例程实体中用作变量,但它因下列其中一种原因而无效:

  • SQLSTATE 未声明为 CHAR(5)
  • SQLCODE 未声明为 INTEGER
  • 变量被赋予空值。

无法处理该语句。

声明 SQLSTATE 变量是 CHAR(5),SQLCODE 变量是 INTEGER。 将变量设置为有效值。

sqlcode:-785

sqlstate:428D8

SQL0787N

RESIGNAL 语句不在处理程序中。 只能在条件处理程序内使用 RESIGNAL 语句。 移除 RESIGNAL 语句,或者转而使用 SIGNAL 语句。

sqlcode:-787

sqlstate:0K000

SQL0788N

未处理语句,因为多次标识了目标表 表名 的某一行以进行更新、删除或插入。 当 MERGE 语句的 ON 搜索条件或 UPDATE 语句的 WHERE 搜索条件与具有多个源表引用行的目标表中的单一行匹配时,将返回此消息。 如果目标表中的某一行与多个源表引用行匹配,那么可能会对该目标行多次执行更新或删除操作,而这不受支持。 使用下列其中一种方式来响应:

  • 更正搜索条件,以确保目标表中的每一行只与源表中的一行相匹配。
  • 通过使用 GROUP BY 子句将源表中与目标表中的行匹配的行聚集起来。
  • 通过使用 ROW_NUMBER() OLAP 表达式来清理数据。

sqlcode:-788

sqlstate:21506

SQL0789N

参数或 SQL 变量 名称 的数据类型在例程、复合 SQL 语句或者游标值构造函数的参数列表中不受支持。 发生了下列情况之一:

  • SQL 例程(函数、方法或过程)或复合 SQL 语句不支持 REFERENCE、LONG VARCHAR、LONG VARGRAPHIC 或结构化数据类型的参数或 SQL 变量。
  • 主体是复合 SQL(编译型)语句的触发器、独立的复合 SQL 语句或者是 SQL 方法的例程不支持 XML 数据类型的参数或 SQL 变量。
  • 不能为类型为 ARRAY、ROW 或 CURSOR 的参数指定缺省值。
  • 外部例程不支持具有结构化数据类型的参数。
  • 游标值构造函数的参数列表不支持 ARRAY、BOOLEAN、CURSOR、ROW、LONG VARCHAR、LONG VARGRAPHIC、REFERENCE 或结构化数据类型的参数。
执行适用的下列其中任何一项操作:

  • 请不要在 SQL 例程定义或复合 SQL 语句中使用 REFERENCE、LONG VARCHAR、LONG VARGRAPHIC 或结构化数据类型的参数或 SQL 变量。
  • 请不要在触发器(其主体是复合 SQL(编译型)语句)、独立的复合 SQL 语句或者是 SQL 方法的例程中使用 XML 数据类型的参数或 SQL 变量。
  • 请不要在外部例程中使用结构化数据类型的参数。
  • 为参数或 SQL 变量 名称 指定另一数据类型。
  • 请不要对类型为 ARRAY、ROW 或 CURSOR 的参数指定缺省值。
  • 请不要在游标值构造函数的参数列表中使用 ARRAY、BOOLEAN、CURSOR、ROW、LONG VARCHAR、LONG VARGRAPHIC、REFERENCE 或结构化数据类型的参数。

sqlcode: -789

sqlstate:429BB

SQL0796N

将角色 角色名-1 授权给角色 角色名-2 无效,因为这会导致循环。 如果会导致循环,那么不能对角色进行授权。 角色 角色名-1 包含角色 角色名-2(可能通过另一角色),因此不能将其授权给 角色名-2 要根据需要排除导致循环的可能性,请从角色 角色名-1 中或从包含在 角色名-1 中但包含 角色名-2 的任意角色中撤销角色 角色名-2,然后重新提交该语句。

sqlcode:-796

sqlstate:428GF

SQL0797N

用不受支持的触发 SQL 语句定义触发器 触发器名 必须使用触发 SQL 语句来定义触发器,此触发 SQL 语句只能包括以下列表中的语句。

触发器可以包含以下控制语句:

  • 复合 SQL(编译型)语句
  • 复合 SQL(直接插入型)语句
  • FOR 语句
  • GET DIAGNOSTICS 语句
  • IF 语句
  • ITERATE 语句
  • LEAVE 语句
  • SIGNAL 语句
  • WHILE 语句

AFTER 触发器或 INSTEAD OF 触发器还可以包括下列触发 SQL 语句:

  • INSERT 语句
  • 搜索的 UPDATE 语句
  • 搜索的 DELETE 语句
  • MERGE 语句
  • CALL 语句
  • 全查询
  • 赋值语句(排除转换变量的赋值)

使用 SQL 复合(编译型)语句定义的 BEFORE 触发器还可包括以下触发 SQL 语句:

  • INSERT 语句
  • 搜索的 UPDATE 语句
  • 搜索的 DELETE 语句
  • MERGE 语句
  • CALL 语句
  • 全查询
  • 赋值语句

如果未使用 SQL 复合(编译型)语句定义 BEFORE 触发器,或者使用 SQL 复合(编译型)语句定义了 BEFORE INSERT 触发器并且触发操作是针对 UNION ALL 视图执行的 INSERT 或针对 WITH ROW MOVEMENT 视图执行的 UPDATE,那么触发 SQL 语句不能包括:

  • 使用修改 SQL 数据的复合 SQL(编译型)语句定义的表函数或标量函数
  • 嵌套的 DELETE、INSERT、MERGE 或 UPDATE 语句

在某些情况下,触发器名 不可在消息中使用。

检查触发器中的触发 SQL 语句,以找出与此消息中描述的列表不匹配的任何语句并将其移除。

sqlcode:-797

sqlstate:42987

SQL0798N

不能为定义为 GENERATED ALWAYS 的列 列名 指定值。 当在表中插入或更新行时,为 GENERATED ALWAYS 列 列名 指定了一值。 除非指定了关键字 DEFAULT,否则,对于插入操作,不应在列列表中(对于更新操作,则是不应在 SET 子句中)指定 GENERATED ALWAYS 列。

未执行 INSERT 或 UPDATE。

从列列表或 SET 子句中移除 GENERATED ALWAYS 列,或者将 DEFAULT 指定为列值。

sqlcode:-798

sqlstate:428C9

SQL0799W

忽略了专用寄存器 专用寄存器名称 的 SET 语句,因为数据库服务器上不存在专用寄存器或者为专用寄存器指定的值无效。 专用寄存器是应用程序进程的数据库管理器所定义的存储区域。 专用寄存器用于存储可在 SQL 语句中引用的信息。

某些专用寄存器可使用 SET 变量语句来更新。

可对 DB2 客户机或驱动程序进行配置以设置专用寄存器。 当对 DB2 客户机或驱动程序进行配置以设置专用寄存器时,客户机或驱动程序向数据库服务器发送应用程序 SQL 语句的同时发送 SET 变量语句。

当尝试更新专用寄存器但数据库服务器上不存在专用寄存器或者为专用寄存器指定的值无效时,将返回此消息。

当客户机或驱动程序向数据库服务器发送应用程序 SQL 语句的同时发送 SET 变量语句时,无论专用寄存器设置成功还是失败,数据库服务器都会处理应用程序 SQL 语句。

如果对 DB2 客户机或驱动程序进行配置以设置专用寄存器,请验证在客户机配置文件 db2dsdriver.cfg 中所指定的专用寄存器设置。

sqlcode:+799

sqlstate:01527

SQL0801N

尝试用零作除数。 列函数或算术表达式的处理导致了除零。

无法处理该语句。 对于 INSERT、UPDATE 或 DELETE 语句,未执行任何插入或更新。

检查 SQL 语句以确定问题的原因。 如果问题与数据有关,那么需要检查发生错误时所处理的数据。 请参阅 SQL Reference 以了解数据类型的有效范围。

联合系统用户:检查 SQL 语句以确定问题的原因。 如果该问题与数据相关,请检查出错时正在数据源上处理的数据。

sqlcode:-801

sqlstate:22012

SQL0802N

发生算术溢出或其他算术异常。 列函数或算术表达式的处理导致算术溢出。

无法处理该语句。 对于 INSERT、UPDATE 或 DELETE 语句,未执行任何插入或更新。

检查 SQL 语句以确定问题的原因。 如果问题与数据有关,那么需要检查发生错误时所处理的数据。 请参阅 SQL Reference 以了解数据类型的有效范围。

当列函数不能处理由 SQL 语句返回的值时,也可能返回此错误。 例如,当对其行数比 MAX_LONGINT_INT SQL 限制定义的行数多的表发出 SELECT COUNT 语句时,将导致算术溢出错误。 考虑对具有多于 2147483647 个行的表使用 COUNT_BIG 列函数。

联合系统用户:检查 SQL 语句以确定问题的原因。 如果该问题与数据相关,请检查出错时正在数据源上处理的数据。 请参阅该数据源对应的 SQL Reference,确定数据类型的有效范围。

sqlcode:-802

sqlstate:22003

SQL0803N

INSERT 语句、UPDATE 语句或由 DELETE 语句导致的外键更新中的一个或多个值无效,因为由 索引标识 标识的主键、唯一约束或者唯一索引将表 表名 的索引键限制为不能具有重复值。 INSERT 或 UPDATE 对象表 表名 被一个或多个 UNIQUE 索引约束为在某些列或列组中具有唯一值。 另外,父表上的 DELETE 语句导致更新从属表 表名(该从属表受一个或多个 UNIQUE 索引约束)中的外键。 唯一索引可能支持在表上定义的主键或唯一约束。 不能处理语句,因为完成所请求的 INSERT、UPDATE 或 DELETE 语句将导致重复的列值。 如果索引在 XML 列上,那么可以从单个 XML 文档中生成索引键的重复值。

另外,如果视图是 INSERT 或 UPDATE 语句的对象,那么在其上定义视图的表 表名 会受到约束。

如果 索引标识 为整数值,那么可以通过发出下列查询来从 SYSCAT.INDEXES 中获取索引名:


SELECT INDNAME, INDSCHEMA
  FROM SYSCAT.INDEXES
  WHERE IID = <index-id>
  AND TABSCHEMA = 'schema'
  AND TABNAME = 'table'

其中,“schema”表示 表名 的模式部分,“table”表示 表名 的表名部分。

无法处理该语句。 未更改表。

检查 索引标识 标识的索引的定义。

对于 UPDATE 语句,确保指定的操作本身与唯一性约束一致。 如果这样做未发生错误,那么检查对象表内容以确定问题的原因。

对于 INSERT 语句,检查对象表内容以确定在指定的值列表中哪个值违反了唯一性约束。 另一方面,如果 INSERT 语句包含了子查询,那么该子查询寻址的对象表内容必须与对象表内容相匹配以确定问题的原因。 注意,如果该表受安全策略保护,那么表示您的 LBAC 凭证可能不允许您查看导致错误的行。

如果索引在 XML 列上并且语句为 INSERT 或 UPDATE,那么应考虑 XML 文档是否将导致单个 XML 文档中产生重复值。

对于 DELETE 语句,检查用规则 ON DELETE SET NULL 定义的外键上唯一约束的已标识从属表。 此表具有外键列,该外键列包括在不能设置为 NULL(因为该表的列中已存在 NULL)的已标识唯一索引中。

联合系统用户:找出导致请求失败的数据源中的问题,并检查先前列示的条件的索引定义和数据。

sqlcode:-803

sqlstate:23505

SQL0804N

当前请求的应用程序参数无效。 原因码为 原因码。 如果在 SQLDA 中的主机变量或 SQLVAR 无效,那么:主机变量/SQLVAR 号 = 变量号,SQLTYPE = sql-类型,SQLLEN = sql-长度,主机变量/SQLVAR 类型 = 输入或输出 在处理当前请求时出错。

  • 如果应用程序员已修改预编译器的输出,或以另一种方式重写了调用参数列表,那么预编译器创建的调用参数列表可能不正确。
  • 在 SQL 语句中的 SQLDA 或主机变量无效。
  • 正在进行的请求不受支持或超出上下文范围。

对原因码的解释如下所示:

100
正在进行的请求不受支持或超出上下文范围。
101
SQLDA.SQLN 小于 SQLDA.SQLD
102
SQLVAR.SQLTYPE 无效。

联合系统用户:您指定的数据类型不受联合服务器或您想访问的数据源的支持。

103
在 SQLVAR.SQLLEN 或 SQLVAR2.SQLLONGLEN 中指定的长度对于 SQLVAR.SQLTYPE 中给定的 SQL 类型不正确。
104
应为 SQLVAR 个数的两倍,但是 SQLDA.SQLDAID 的 SQLDOUBLED 字段未设置为“2”。 因为存在大对象类型或结构化类型,所以这可能是必需的。
105
双字节字符大对象具有由 SQLVAR2.SQLDATALEN 指针指示的奇数值,它总是以字节为单位,即使对于 DBCLOB 也是如此。
106
SQLDATA 指针无效,或者它指向的存储器空间不够。
107
SQLIND 指针无效,或者它指向的存储器空间不够。
108
SQLDATALEN 指针无效,或者它指向的存储器空间不够。
109
当前 SQL 语句期望特定数目的主机变量/SQLVARS。
110
LOB 定位器与兼容类型的 LOB 不相关。
111
LOB 由 SQLVAR 的 SQLTYPE 指示,但第二个 SQLVAR 是 NULL。
112
SQLDATATYPE NAME 字段无效。 它不符合在数据库中标识现有用户定义的类型的格式。 标识现有用户定义的类型的格式如下:8 字节,后跟一个句点,再后跟 18 字节。
113
SQLFLAG4 字段无效。 如果指定了结构化类型,那么该值必须为 X’12’。 如果指定了引用类型,那么该值必须为 X’01’。 否则,该值必须为 X’00’。
115
在不能包含 XML 数据的 SQLVAR.SQLNAME 字段中对 SQLVAR.SQLTYPE 设置了 XML 子类型指示符。

在带有主机变量的 SQL 语句中,使用主机变量号从该语句或子语句(对于复合 SQL)的起始位置开始计数,以找出无效的主机变量。 对于使用 SQLDA 的语句,SQLVAR 号用于查找无效的 SQLVAR。 对于输入 SQLDA,只对输入主机变量或 SQLVAR 进行计数;对于输出 SQLDA,与此类似。 注意,此号码从 1 开始。

无法处理该语句。

检查应用程序中是否有记录的任何错误。 注意,程序员不要尝试修改预编译器输出。

联合系统用户:如果您接收到原因码 102,那么指定一个受支持的数据类型,并重新提交该程序。

sqlcode:-804

sqlstate:07002

SQL0805N

找不到程序包 程序包名 不能完成语句,因为未在目录中找到必要的程序包。

程序包名 的格式为:

  • “pkgschema.pkgname 0Xcontoken”,其中一致性标记以十六进制给出。
  • “pkgschema.pkgname.pkgversion”,如果程序包版本为空字符串,那么名称省略“.pkgversion”。
  • “%.pkgname”,如果设置了 CURRENT PACKAGE PATH。 CURRENT PACKAGE PATH 中模式名的设置是由百分比字符(“%”)来指示的。

此消息(SQLCODE)的可能原因是:

  • 程序包未绑定或已删除。
  • 如果尝试运行 DB2 实用程序或 CLI 应用程序,那么 DB2 实用程序可能需要重新绑定至数据库。
  • “%.pkgname”,如果设置了 CURRENT PACKAGE PATH,但是在 CURRENT PACKAGE PATH 中的任何模式中都找不到名称为“pkgname”的程序包。

注意,当对给定的 package-schema.package-name 版本标识使用版本标识时,可能有以相同的程序包模式和程序包名定义的程序包,但是未找到正确的程序包,原因是现有程序包与请求的版本或一致性标记不一致。 程序包必须与程序包名的所有三个部分相匹配。 当正在使用多个版本,导致出现此消息的附加原因为:

  • 正在执行的应用程序的版本已预编译、编译和链接,但是未绑定,或已绑定但是后来删除了该版本的程序包。
  • 应用程序已预编译和绑定,但是未编译和/或链接,所以正在执行的应用程序不是最新的。
  • 程序包由与生成编译并链接至应用程序可执行文件的已修改源文件的预编译不同的源文件预编译生成的绑定文件绑定。
  • 新应用程序同与现有的程序包相同的名称(和版本)绑定,这样就替换了现有的程序包。 如果运行与替换的程序包相关联的应用程序,那么将导致此错误。

在所有这些情况下,请求的一致性标记与现有版本的一致性标记不匹配,因此认为未找到程序包。

无法处理该语句。

指定正确的程序包名或绑定该程序。 如果正在运行的应用程序未与数据库绑定,请与数据库管理员联系以执行必需的绑定。 确保正在执行的应用程序或对象模块是与生成程序包的预编译和绑定相关联的已编译和链接的修改源代码。

如果设置了 CURRENT PACKAGE PATH,那么确保在 CURRENT PACKAGE PATH 中指定了包括程序包的模式。

可以使用下列 SQL 语句来查询目录以确定是否有程序包的不同版本:


SELECT PKGSCHEMA, PKGNAME,
       PKGVERSION, UNIQUE_ID
FROM SYSCAT.PACKAGES
WHERE PKGSCHEMA = 'pkgschema'
      and PKGNAME='pkgname'.

注意 UNIQUE_ID 列与一致性标记相对应。

如果 DB2 实用程序需要重新绑定至数据库,那么当连接至数据库时,数据库管理员可以通过从实例的 bnd 子目录发出下列 CLP 命令之一来完成此操作:

  • 对于 DB2 实用程序,发出“db2 bind @db2ubind.lst blocking all grant public”。
  • 对于 CLI,发出“db2 bind @db2cli.lst blocking all grant public”。

联合系统用户:确保在适用的数据源上绑定联合服务器所必需的程序包。 请参阅《联合系统指南》,以了解有关将程序包绑定至数据源的更多信息。

sqlcode:-805

sqlstate:51002

SQL0808N

CONNECT 语句的语义与其他现有连接的语义不一致。 CONNECT 语句来源于一个源文件,该源文件预编译成具有与存在连接的源文件不同的连接选项(SQLRULES、CONNECT 类型、SYNCPOINT 或 RELEASE 类型)。 确保使用相同的 CONNECT 选项预编译所有的源文件,如果这不能实现,那么在发出第一个 CONNECT 语句之前,调用 SET CLIENT API 来对应用程序进程设置期望的选项。

sqlcode:-808

sqlstate:08001

SQL0811N

标量全查询、SELECT INTO 语句或 VALUES INTO 语句的结果多于一行。 下列其中一项导致了该错误:

  • 执行嵌入式 SELECT INTO 或 VALUES INTO 语句导致结果表多于一行。
  • 执行标量全查询导致结果表多于一行。

联合系统用户:联合服务器或数据源可以检测到此情况。

无法处理该语句。

确保语句包含适当的条件规范。 如果有,那么可能有导致在仅期望返回一行时却返回了多行的数据问题。

联合系统用户:找出导致请求失败的数据源中的问题,并检查该对象的选择标准和数据。

sqlcode:-811

sqlstate:21000

SQL0817N

因为该 SQL 语句将导致禁止的更新操作,所以不能执行该语句。

应用程序尝试执行将导致更新用户数据或子系统目录的 SQL 语句。 因为下列其中一种原因,禁止此操作:

  • 该应用程序正在作为 IMS 仅查询事务运行。
  • 该应用程序是 IMS 或 CICS 应用程序,它尝试更新不支持两阶段落实的远程 DBMS 上的数据。
  • 该应用程序尝试更新多个位置处的数据,但其中一个位置不支持两阶段落实。

这些 SQL 语句包括 INSERT、UPDATE、DELETE、CREATE、 ALTER、DROP、GRANT 和 REVOKE。

无法执行该语句。

如果该应用程序正在作为 IMS 仅查询事务运行,请与 IMS 系统程序员联系,咨询有关更改您的应用程序正在其下运行的事务的仅查询状态的信息。

如果 IMS 或 CICS 应用程序正在尝试远程更新,那么必须将该应用程序更改为作为服务器 DBMS 上的本地应用程序运行,或必须将服务器 DBMS 升级,使之支持两阶段落实。

如果该应用程序正在尝试更新多个位置处的数据,那么必须更改该应用程序,或必须将所涉及的所有 DBMS 都升级,使它们支持两阶段落实。

sqlcode:-817

sqlstate:25000

SQL0818N

发生了时间戳记冲突。 预编译时由预编译器生成的时间戳记与绑定时存储在程序包内的时间戳记不同。

此问题可能是由下列各项导致的:

  • 应用程序已预编译、编译和链接,但是未绑定。
  • 应用程序已预编译和绑定,但是未编译和/或链接,所以正在执行的应用程序不是最新的。
  • 程序包由与生成编译并链接至应用程序可执行文件的已修改源文件的预编译不同的源文件预编译生成的绑定文件绑定。
  • 新应用程序与相同名称和现有的程序包绑定,这样就替换了现有的程序包。 如果运行与替换的程序包相关联的应用程序,那么将导致此错误。

联合系统用户:除了前面列示的原因之外,该问题还可因未在所有适用数据源上绑定必需的程序包而引起。

无法处理该语句。

使用与对象模块匹配的程序的绑定文件再次绑定应用程序。 或者,执行与存储在数据库中的程序包相应的程序。

如果正在安装样本数据库,那么记录此消息的编号和文本,然后与技术服务代表联系。

联合系统用户:除了前面列示的操作之外,确保在适用的数据源上绑定联合服务器所必需的程序包。 请参阅《联合系统指南》,以了解有关将程序包绑定至数据源的更多信息。

sqlcode:-818

sqlstate:51003

SQL0822N

SQLDA 包含数据地址或无效的指示符变量地址。 应用程序将一个无效的地址置于 SQLDA 中。

无法处理该语句。

更正应用程序以将有效的地址置于 SQLDA 中。

sqlcode:-822

sqlstate:51004

SQL0840N

SELECT 列表中返回了太多项。 SELECT 列表中返回的项数超过可允许的最大值。 SELECT 列表的最大值是 2048(除了在公共表表达式上之外)。 公共表表达式中 SELECT 列表的最大值是 5000。

无法处理该语句。

确定是否所有信息都是实际需要的。 (注意,SELECT list * 在 SQL 语句 SELECT * from A, B, C 中返回的项数是所有三个表中的列数之和。) 如果可能,请重写 SQL 语句,以便仅返回必需的信息项。 如果所有信息都是必要的,那么将 SQL 语句分成两条或多条语句。

sqlcode:-840

sqlstate:54004

SQL0842N

已存在与服务器 服务器名 的连接。 SQLRULES(STD) 有效并且 CONNECT 语句标识现有的 SQL 连接。

更正取决于错误:

  • 如果服务器名不是需要的名称,那么进行更正。
  • 如果 SQLRULES(STD) 有效并且 CONNECT 语句标识现有的 SQL 连接,那么用 SET CONNECTION 替换 CONNECT,或将选项更改为 SQLRULES(DB2)。

更正应用程序中的错误,然后再次尝试。

sqlcode:-842

sqlstate:08002

SQL0843N

服务器名未指定现有的连接。 语句、命令或 API 指定了不标识该应用程序进程的现有 SQL 连接的服务器名。

使用下列语句时可能发生此情况:

  • SET CONNECTION 语句
  • RELEASE 语句
  • DISCONNECT 语句
  • SET 或 QUERY CLIENT INFORMATION

更正取决于错误:

  • 如果服务器名不是需要的名称,那么进行更正。
  • 确保已建立与服务器的连接,且在对该连接发出请求前该连接处于当前状态或休止状态。

更正应用程序中的错误,然后再次尝试。

sqlcode:-843

sqlstate:08003

SQL0845N

在 NEXT VALUE 表达式在序列 序列名称 的当前会话中生成值之前,不能使用 PREVIOUS VALUE 表达式。 PREVIOUS VALUE 表达式指定了序列 序列名,但是尚未为此序列生成值。 在可以发出序列的 PREVIOUS VALUE 表达式之前,必须在此会话中发出 NEXT VALUE 表达式,以便为此序列生成值。 在对会话中的同一序列发出任何 PREVIOUS VALUE 表达式之前,至少应对序列发出一个 NEXT VALUE 表达式。

sqlcode:-845

sqlstate:51035

SQL0846N

标识列或序列对象 对象类型 对象名 的规范无效。 原因码:原因码

对于标识列或序列对象,CREATE 或 ALTER 语句中的属性的规范可能是无效的,原因为下列其中之一:

  1. 标识列或序列对象的基本数据类型不受支持。 标识列和序列对象支持下列数据类型:SMALLINT、INTEGER、BIGINT 和 DECIMAL(或 NUMERIC),小数位为零。
  2. START WITH、INCREMENT BY、MINVALUE 或 MAXVALUE 的值超出了标识列或序列对象的数据类型的范围。
  3. MINVALUE 必须小于或等于 MAXVALUE。
  4. 为 CACHE 指定了无效值。 该值必须为 INTEGER,最小值为 2。
更正语法并重新提交该语句。

sqlcode:-846

sqlstate:42815

SQL0857N

指定了冲突的选项(选项-1 和 选项-2)。 指定了冲突的选项。 必须同时指定 option1 和 option2,或者同时不指定这两个选项。

如果在定义列时指定了 IMPLICITLY HIDDEN,那么该列还必须定义为 ROW CHANGE TIMESTAMP 列。

无法执行该语句。

根据选项的不同,同时指定这些选项或不同时指定这些选项。

sqlcode:-857

sqlstate:42867

SQL0859N

对“事务管理器数据库”访问失败,SQLCODE 为 SQLCODE

应用程序是用 SYNCPOINT(TWOPHASE) 预编译的,且需要“事务管理器数据库”来协调两阶段落实。 “事务管理器数据库”不可用的原因可能包括下列各项:

  • 未创建该数据库。
  • 未用数据库名称更新或激活数据库管理器配置文件的 tm_database 字段。
  • 数据库存在,但是与数据库的通信失败。

可能的操作:

  • 请参阅随此消息返回的 SQLCODE,并且遵循该 SQLCODE 的适当操作。
  • 验证 tm_database 是否存在,如果不存在,那么创建新数据库或选择当前存在的数据库来用作 TM 数据库。 如果没有对磁盘存储器的严格约束,那么建议创建独立的数据库。
  • 使用字段 tm_database 来更新 TM 数据库的数据库管理器配置(如果尚未完成)。
  • 验证是否可以连接 tm_database。 例如,使用“命令行处理器”尝试该连接。
  • 确保选择的 tm_database 不是通过 DB2 Connect 访问的数据库。

sqlcode:-859

sqlstate:08502

SQL0863W

已成功进行连接,但只应使用单字节字符。 服务器数据库和客户机应用程序正在将代码页用于不同的语言类型,并且不能保证在 7 位 ASCII 范围之外的任何字符(所有代码页中只存在 7 位 ASCII 范围中的字符)。 例如,连接可能是在日文代码页与 Latin1 代码页之间进行的,但在 Latin1 代码页中,将没有日文字符可用,因此应避免所有这些字符(但是,英文字符则没问题)。

联合系统用户:原因可能是:

  • 联合数据库支持单字节和双字节字符,但数据库客户机系统只支持单字节字符。
  • 数据源支持单字节和双字节字符,但是联合系统只支持单字节字符。
不要提交使用对于应用程序代码页和数据库代码页不是公共的字符的 SQL 语句或命令。

联合系统用户:不要提交使用对于客户机系统、联合系统和数据源不是公共的字符的 SQL 语句或命令。

sqlcode:+863

sqlstate:01539

SQL0864N

引用约束 约束名 尝试了修改表 表名 中由全查询内的 SQL 数据更改语句修改的行。 在 FROM 子句中指定了 SQL 数据更改语句,但是 SQL 数据更改语句的底层目标基本表具有将修改同一个表的引用约束。 这是不允许的。

无法处理该语句。

避免在 FROM 子句中使用 SQL 数据更改语句,或者更改引用约束以便使它不会修改是 SQL 数据更改语句的目标的表。

sqlcode:-864

sqlstate:560C6

SQL0865N

m_database 值无效。 在数据库管理器配置中选择作为 tm_database 的数据库无效。 该数据库必须处于 DB2 V2.1 或更高版本,并且不能是通过 DRDA 协议(即,通过 DB2 Connect)访问的数据库。

无法执行该语句。

  1. 更新数据库管理器配置,以对 tm_database 参数 指定有效的数据库。
  2. 发出 db2stop 和 db2start 以确保更改生效。

sqlcode:-865

sqlstate:08001

SQL0866N

数据服务器驱动程序或数据服务器客户机终止了与名为 database-name 的数据库的连接,因为 db2dsdriver.cfg 文件的 <alternategroup> 部分无效。 如果与数据库的连接失败,您可以指定多个备用数据库服务器,以便自动客户机重新路由连接到它们,使用 db2dsdriver.cfg 文件的 <alternategroup> 部分。 此功能在 DB2 for Linux, UNIX, and Windows 以及 DB2 for z/OS 服务器中受支持。

在连接到 DB2 for z/OS 数据库服务器时,对 db2dsdriver.cfg 文件的 <alternategroup> 部分的内容有一些限制。 如果名为 db_A 的数据库位于 DB2 for z/OS 数据库服务器上,那么在 db_A 的 <alternategroup> 部分中不能有超过一个 <database> 条目。

出现下列其中一种情况时,会返回此消息:

  1. 备用组在名为 数据库名称 的数据库所在的数据库服务器上不受支持。
  2. db2dsdriver.cfg 内容不符合 <alternategroup> 部分的 DB2 for z/OS 限制。
在 db2dsdriver.cfg 文件中,修改与指定的数据库 database-name 相关的 <alternategroup> 部分,以便这些条目和部分符合 <alternategroup> 支持限制:

  1. 移除 db2dsdriver.cfg 文件中的 <alternategroup> 部分。
  2. 在该 <alternategroup> 部分中只指定一个数据库条目。

sqlcode:-866

sqlstate:08001

SQL0868N

对连接已存在的服务器尝试了使用 USER/USING 子句的 CONNECT。 存在与服务器的当前或休止连接,使用 USER/USING 子句连接(CONNECT)到此服务器的尝试无效。

可能的操作:

  • 使用 SET CONNECTION 语句使到 DORMANT 连接的连接成为当前连接。
  • 如果应用程序正在使用 SQLRULES(DB2),那么使用不带 USER/USING 的 CONNECT 语句。
  • 完成现有的工作单元,断开连接,然后使用 USER/USING 重新连接。

sqlcode:-868

sqlstate:51022

SQL0873N

不能在同一条 SQL 语句中引用使用不同编码方案编码的对象。 未使用同一编码方案定义 SQL 语句中引用的所有表、SQL 函数和 SQL 方法。

在下列情况下可能出现此状况:

  • 在语句中引用了使用 ASCII 或 Unicode 编码方案创建的表,同时具有未使用同一编码方案创建的表
  • 在语句中引用了使用 ASCII 或 Unicode 编码方案创建的 SQL 函数或 SQL 方法,同时具有未使用同一编码方案创建的表
  • 有源函数是使用不同于源函数的编码方案的编码方案创建的
  • 异常表是使用不同于操作的基本表的编码方案的编码方案创建的
更正 SQL 语句以便只引用使用同一编码方案的对象。

sqlcode:-873

sqlstate:53090

SQL0874N

所有参数的 CCSID 都必须与例程的 PARAMETER CCSID 相匹配。 例程的所有参数必须与例程本身使用同一编码方案。 如果对参数指定了 CCSID,那么它必须与对例程隐式或显式指定的 PARAMETER CCSID 选项相匹配。 从参数中移除 CCSID 选项或更改该语句以使从头到尾指定相同的 CCSID 值。

sqlcode:-874

sqlstate:53091

SQL0880N

在此上下文中,SAVEPOINT 保存点名 不存在或无效。 发出 RELEASE 或 ROLLBACK TO SAVEPOINT 保存点名 语句时出错。 不存在具有该名称的保存点,或它是在当前原子执行上下文外部建立的。

无法处理该语句。

在语句中更正保存点的名称,并重新发出该语句。

sqlcode:-880

sqlstate:3B001

SQL0881N

已经存在具有名称 保存点名 的 SAVEPOINT,但是,不能再使用此保存点名。 在 SAVEPOINT 语句中已使用名称 保存点名。 不能再使用该保存点名,因为至少有一个使用此名称的 SAVEPOINT 语句也指定了 UNIQUE 关键字,它要求该名称必须是唯一的。

无法处理该语句。 未设置新的保存点。 具有同一名称的旧保存点仍然存在。

为此保存点选择另一个名称,并重新发出 SAVEPOINT 语句。 如果必须再使用此现有保存点名,那么发出 RELEASE SAVEPOINT 语句以释放现有的保存点。 但是,您应该知道,RELEASE SAVEPOINT 语句还会释放自建立 指定的保存点以来在事务中所建立的任何保存点。 有关更多信息,请参阅 SQL Reference。

sqlcode:-881

sqlstate:3B501

SQL0882N

保存点不存在。 发出 ROLLBACK TO SAVEPOINT 语句时出错。 当没有任何现有的保存点时,不允许发出未指定特定保存名的 ROLLBACK TO SAVEPOINT。

无法处理该语句。

发出另一语句,或者尝试用 ROLLBACK 语句回滚整个事务。

sqlcode:-882

sqlstate:3B502

SQL0900N

应用程序状态出错。 不存在数据库连接。

不存在数据库连接。 这可能是由下列其中一个原因引起的:

  • 应用程序状态的严重错误导致丢失数据库连接。
  • 应用程序可能已与数据库断开连接,在执行下一条 SQL 语句之前未建立新的当前连接。
  • 请求切换可信连接中的用户未成功。
通过(使用 CONNECT TO 或 SET CONNECTION)切换至现有的一个休眠连接、通过(使用 CONNECT)建立新连接或者通过成功切换至可信连接中的另一个用户来重新建立当前连接。

sqlcode:-900

sqlstate:08003

SQL0901N

SQL 语句或命令由于数据库系统错误而失败。 (原因:原因)。 在许多场景中,有可能返回此消息。 以下是两个有可能返回此消息的场景示例:

  • Windows 操作系统:在 Windows 操作系统上返回此错误的一种原因是,反病毒或防火墙软件不允许数据库管理器读取或写入与 DB2 数据库或数据库管理器相关的文件。
  • 迁移和升级场景:在升级到新版本之后或者在应用修订包之后可能返回此错误的一种原因是,有一个或更多的表、相关索引或统计视图的统计信息并非最新。

在某些情况下,虽然这次尝试执行 SQL 语句失败,但将来尝试执行此 SQL 语句或其他语句有可能成功。

运行时标记 原因 可能为空,也可能包含仅供 IBM 软件支持人员参考的英文文本。

通过执行以下故障诊断步骤对此错误作出响应:

Windows 操作系统:
禁用反病毒或防火墙软件。

如果在安装了 DB2 数据库的计算机上安装了反病毒或防火墙软件并且正在运行此软件,请将该反病毒或防火墙软件禁用并再次执行此语句,以确定问题是否由该反病毒或防火墙软件引起。

如果禁用反病毒或防火墙软件可以解决问题,请为下列与 DB2 数据库相关的目录添加例外情况,然后再次启用该反病毒或防火墙软件:

  • “IBM\\sqllib”- DB2 数据库应用程序文件
  • “IBM\\DB2”- 数据库管理器实例
  • “<install-drive>\\DB2” – 数据库分区目录
迁移和升级场景:
使用 RUNSTATS 命令来更新统计信息,然后再次执行此语句。
联合环境:
  1. 确定是联合数据源还是联合数据库服务器返回了错误。
  2. 收集诊断信息,并执行返回了错误的数据源或联合数据库服务器的相应故障诊断步骤。请参考返回了错误的数据源或联合数据库服务器的相应诊断和故障诊断参考信息,这是因为,数据源的问题确定过程有所不同。

执行上述故障诊断步骤后,如果仍发生错误,请与 IBM 软件支持人员联系以寻求帮助:

  1. 使用 DB2 跟踪和“独立跟踪工具”之类的跟踪工具来收集诊断信息。
  2. 收集以下诊断信息:
    • 问题描述
    • SQLCODE
    • 原因:原因
    • SQLCA 内容(如果有可能)
    • 跟踪文件(如果有可能)。
  3. 与 IBM 软件支持人员联系。

sqlcode:-901

sqlstate:5UA0L 和 58004

SQL0902C

发生了系统错误。 无法处理后续的 SQL 语句。 IBM 软件支持原因码:原因码 当数据库管理器遇到关键错误(例如严重的操作系统错误)或者访问存储介质时发生错误(这可能导致数据库不再可用)时,将返回此消息。 数据库管理器可能会在不同的场景中遇到操作系统错误或严重的介质错误。 以下是可能返回此消息的场景的一个示例:

  • 当数据库管理器资源需要信标,但没有足够的信标可满足请求时,可能会返回此消息。

运行时标记 原因码 有时可能为空,并且仅用于为 IBM 软件支持人员提供帮助。

作为对此消息的响应,执行以下故障诊断步骤:

  1. 复查 db2diag 日志文件中的诊断信息,以确定返回此消息前发生的错误。
  2. 如果 db2diag 日志文件中的消息指出请求使用的信标过多,或者没有足够的信标可用于满足数据库管理器请求,请使用操作系统参数增大信标数目。

执行上述故障诊断步骤后,如果仍发生错误,请与 IBM 软件支持人员联系以寻求帮助:

  1. 使用 DB2 跟踪和“独立跟踪工具”之类的跟踪工具来收集诊断信息。
  2. 收集以下诊断信息:
    • 问题描述
    • SQLCODE
    • 原因:原因
    • SQLCA 内容(如果有可能)
    • 跟踪文件(如果有可能)
  3. 与 IBM 软件支持人员联系。

联合系统用户:找出导致请求失败的数据源中的问题,并对该数据源执行必需的诊断步骤。 数据源的问题确定过程各有不同,因此参阅适用的数据源手册。

sqlcode:-902

sqlstate:58005

SQL0903N

COMMIT 语句失败,事务已回滚。 原因码:原因码 一个或多个参与当前工作单元的服务器无法准备数据库,因此无法进行落实。 COMMIT 语句已失败,事务已回滚。 如果只有一台服务器参与当前工作单元,那么表示可能已落实该事务。

可能的原因码是:

01
与其中一个参与工作单元的数据库的连接丢失。
02
访问了其中一个参与工作单元的数据库或节点,但无法预编译落实。

联合系统用户:如果您连接的数据库是使用昵称的联合服务器数据库,那么无法预编译落实昵称所必需的其中一个数据源。

03
无法预编译落实参与工作单元的 DB2 Data Links Manager。
04
已创建或者已声明的一个或多个临时表处于不一致状态。
05
发生了意外错误。 查阅管理通知日志以了解详细信息。

联合系统用户:如果您连接的数据库是使用昵称的联合服务器数据库,那么与数据库中的昵称所必需的其中一个数据源的连接丢失。

06
无法将再同步信息发送至其中一个参与者。 该参与者只支持 IPv4。 请对该参与者启用双堆栈方式。
如果丢失了与数据库的连接,那么重新建立连接。 如果故障与连接无关,那么参阅远程系统上的错误诊断日志以确定故障的性质以及可能需要的操作。 重新运行应用程序。

sqlcode:-903

sqlstate:40504

SQL0904N

执行不成功是由不可用的资源导致的。 原因码:原因码,资源类型:资源类型,资源名称:资源名称 因为类型为 资源类型 的资源 资源名称 当时不可用,所以不能执行 SQL 语句,资源不可用的原因由 原因码 指示。 请参阅 DB2 MVS 版的“问题确定”文档,以获取有关资源类型代码的说明。 验证不可用的资源的标识。 要确定资源不可用的原因,请参阅指定的 原因码

sqlcode:-904

sqlstate:57011

SQL0905N

由于超过资源限制,因此执行不成功。 资源名称 = 资源名称,限制 = 限制量-1 CPU 秒(限制量-2 服务单元)由 限制源 派生的。 因为超过资源限制,SQL 语句的执行被终止。

超过限制的资源的名称是 资源名称。 它也是资源限制规范表中的列的名称,限制就是从该表派生出来的。 在 CPU 秒数中,超过的限制是 限制量-1,在服务单元中,它是 限制量-2。 资源名称 可能是 ASUTIME,它是每条 SQL 语句所允许的 CPU 秒数。 允许的最大 CPU 秒数为 限制量-1。 最大服务单元数为 限制量-2

用来派生限制量的源为 限制源,它是资源限制规范表或“系统参数”的名称。 如果该源是系统参数,那么资源限制规范表不包含可用的条目或访问该表时发生错误。 在任一情况下,该限制都是从安装(系统)参数中获得的。

确定为何此 SQL 语句需要这样长的时间并执行适当的操作。 考虑简化该 SQL 语句、重构表和索引、或者与负责维护该资源限制规范表的安装组联系。

接收此返回码的应用程序可以执行附加的 SQL 语句。

sqlcode:-905

sqlstate:57014

SQL0906N

不能执行 SQL 语句,因为先前的错误导致此函数被禁用。 执行 SQL 语句失败,因为先前的错误导致所请求的函数被禁用。 如果应用程序拦截到一个异常结束(例如,由 PL/I 程序中的 ON ERROR 条件引起)时继续执行 SQL 语句,可能就会发生这种情况。 如果 DB2 CICS 事务遇到创建线程错误时仍继续发出 SQL 请求而不先发出 SYNCPOINT ROLLBACK,也可能会发生这种情况。 一般情况下,应用程序一旦收到此返回码就应终止。 该应用程序执行其他 SQL 语句的所有后续尝试也将失败并带有相同的返回码。 对于 DB2 CICS 事务,如果 SQLCA 中的 SQLERRP 字段中包含模块名 DSNCEXT1,那么该事务可能会发出 SYNCPOINT ROLLBACK 并继续处理。 如果该事务选择 ROLLBACK 并继续处理,那么它必须能更正最初导致发生创建线程错误的那些情况。

sqlcode:-906

sqlstate:24514, 51005, 58023

SQL0907N

试图通过约束或触发器 name 修改 MERGE 语句的目标表 table-name 。 MERGE 语句导致激活了约束或触发器 名称,该约束或触发器尝试对还作为该 MERGE 语句目标表的表 表名 或位于同一个表层次结构中的表执行更新、插入或删除。 这是不允许的。 更改 MERGE 语句以移除导致激活约束或触发器的操作,或改变带有约束或触发器的表以移除对目标表的引用。

sqlcode:-907

sqlstate:27000

SQL0908N

bind-type 错误,不允许使用 auth-id 权限 BIND、REBIND 或 AUTO_REBIND 操作。

对于 BIND 和 REBIND,不允许指示的授权标识对计划或程序包执行指示的 绑定类型。 在资源限制规范表(RLST)中的一个条目禁止使用授权标识或所有授权标识来进行绑定和重新绑定。 对于 AUTO-REBIND,用于控制 AUTO-REBIND 操作的系统参数被设置为不允许 AUTO-REBIND。

bind-type
绑定操作类型(BIND、REBIND 或 AUTO-REBIND)。
授权标识
BIND 子命令的调用程序的授权标识,或者是计划执行 AUTO-REBIND 操作的调用程序的主授权标识。
如果应该允许绑定所指示的授权标识,那么更改活动的 RLST 表中的该条目。 如果禁用 AUTO-REBIND 操作,那么在重新执行程序包之前,重新绑定该程序包。

sqlcode:-908

sqlstate:23510

SQL0909N

对象已删除。 应用程序(1)删除了表,然后尝试访问它,或者,(2)删除了索引,然后尝试使用该索引来访问其对象表。 必须更正应用程序的逻辑,以便使它在被删除之后,不要尝试访问或使用对象。

删除应用程序中的索引是相当危险的,因为没有方法可以确定(通过 BIND 或 REBIND)为该应用程序实际生成的计划是否使用特定的索引来访问其对象表。

sqlcode:-909

sqlstate:57007

SQL0910N

SQL 语句不能访问在其上的修改被暂挂的对象。 应用程序尝试访问同一工作单元中的对象,在该工作单元中:

  • 应用程序向对象或相关对象(例如,表索引)发出了 DROP
  • 应用程序向添加或删除约束的对象发出一条语句。
  • 应用程序发出直接或间接影响对象的 DROP TRIGGER 或 CREATE TRIGGER 语句。
  • 应用程序发出了 ROLLBACK TO SAVEPOINT 语句,它将对象置于修改暂挂状态。
  • 应用程序发出了一条语句,它导致已创建的 NOT LOGGED 临时表或者已声明的 NOT LOGGED 临时表的所有行都被删除。
  • 应用程序发出了 ALTER TABLE … ADD PARTITION, ALTER TABLE … ATTACH PARTITION 或 ALTER TABLE … 针对对象(在本例中为表)的 DETACH PARTITION 语句。 如果一个工作单元包含一个 ALTER TABLE … ATTACH PARTITION,然后在同一工作单元中,一个 ALTER TABLE … 不能对相同的表执行 DETACH PARTITION。
  • 应用程序发出了 DETACH 以便在一个分区 MDC 表中的一个数据分区中创建此对象。
  • 应用程序发出了一个 SQL 语句来尝试访问一个可信上下文对象,而对该对象进行的修改却处于暂挂状态。 该 SQL 语句可能是下面的其中一个:
    • ALTER TRUSTED CONTEXT
    • CREATE TRUSTED CONTEXT
    • DROP TRUSTED CONTEXT
  • 应用程序已发出 CREATE USER TEMPORARY TABLESPACE 语句或 ALTER TABLESPACE 语句。 如果工作单元包含 CREATE USER TEMPORARY TABLESPACE 语句或 ALTER STATEMENT 语句,那么在同一工作单元中,以后不能进行将致使表被实例化的已创建临时表引用。

或者,应用程序发出了一个 SQL 语句来尝试访问一个 WLM 对象,而对该对象进行的修改却处于暂挂状态。 该 SQL 语句可能是下面的其中一个:

  • ALTER HISTOGRAM TEMPLATE
  • ALTER THRESHOLD
  • ALTER SERVICE CLASS
  • ALTER WORK ACTION
  • ALTER WORK CLASS
  • ALTER WORKLOAD
  • CREATE HISTOGRAM TEMPLATE
  • CREATE THRESHOLD
  • CREATE SERVICE CLASS
  • CREATE WORK ACTION
  • CREATE WORK CLASS
  • CREATE WORKLOAD
  • 对以下任何对象执行 DROP 操作:HISTOGRAM TEMPLATE、THRESHOLD、SERVICE CLASS、WORK ACTION、WORK CLASS 和 WORKLOAD
  • GRANT(工作负载特权)
  • REVOKE(工作负载特权)

联合系统用户:除了前面列示的原因之外,还可能存在导致无法访问该对象的其他数据源特定限制。

不能处理 SQL 语句。

修改应用程序,以使在执行修改的同一工作单元里没有尝试访问对象。 总的说来,隔离不同工作单元中的“数据定义语言”(DDL) 语句比隔离访问相同对象的“数据操作语言”(DML) 语句要好。

在可以成功地处理失败的语句之前,必须落实或回滚工作单元。 如果落实的修改导致要删除对象,那么可能必须重新创建该对象才能使失败的 SQL 语句处理成功。

如果对象是在 SAVEPOINT 内修改的,那么修改应用程序,以使在应用程序发出 ROLLBACK TO SAVEPOINT 语句之后,它不会尝试访问该对象。 访问已修改对象且在 ROLLBACK TO SAVEPOINT 时处于打开状态的任何游标将不可访问。 修改应用程序,以使它关闭该游标。

如果涉及已创建的 NOT LOGGED 临时表或者已声明的 NOT LOGGED 临时表的插入、删除或更新语句失败,那么该表中的所有行都被删除。 在发生故障时,针对该表打开的任何游标都将不可访问并且应该由应用程序关闭。

如果一个 ALTER TABLE … 由于 ALTER TABLE 暂挂,DETACH PARTITION 失败 … ATTACH PARTITION,使用两个不同的工作单元来执行这两个操作。

如果该 SQL 语句尝试访问一个可信上下文对象,那么稍后重新发出该语句。

如果该 SQL 语句尝试访问一个 WLM 对象,那么稍后重新发出该语句。

联合系统用户:如果前面的操作无法解决该问题,那么找出请求,并确定数据源还存在哪些约束会导致无法访问该对象。 确保应用程序未违反任何那些约束。

sqlcode:-910

sqlstate:57007

SQL0911N

因为死锁或超时,所以当前事务已回滚。 原因码为 原因码 当前工作单元参与了未解决的对象争用,因此必须回滚。

原因码如下所示:

2
由于死锁而导致事务已回滚。
68
由于锁定超时而导致事务已回滚。
72
由于存在与事务中所涉及的 DB2 Data Links Manager 错误,所以事务已回滚。
73
由于 CONCURRENTDBCOORDACTIVITIES 阈值之类的排队阈值导致两个或更多活动进入死锁状态,所以事务已回滚。
74
与原因码 73 相似,由于两个或更多个活动进入死锁状态,所以事务已回滚。
75
由于两个或更多应用程序在等待由工作负载管理器许可控制和锁定进行管理的资源组合时发生死锁,所以事务已回滚。
76
事务已回滚,因为两个或更多应用程序在等待由工作负载管理器许可控制管理的资源时发生死锁。
80
因为目录成员处于再同步状态,所以无法完成该请求。
81
无法完成该请求,因为目录成员正在执行数据库更新操作。

应用程序已回滚至上一次 COMMIT 操作。

必须再次输入与工作单元相关的更改。

为了帮助避免死锁或锁定超时,对长时间运行的应用程序或有可能遇到死锁的应用程序频繁发出 COMMIT 操作(如果有可能)。

联合系统用户:联合服务器或数据源处可能会发生死锁。 没有检测跨越数据源并潜在地跨越联合系统的死锁的机制。 有可能标识使请求失败的数据源(请参阅 Problem Determination Guide 以确定哪一个数据源使 SQL 语句的处理失败)。

当处理 SQL 语句的某些组合时,通常会发生死锁或者预期会发生死锁。 建议您设计应用程序来尽可能避免死锁。

如果因为排队阈值(例如,CONCURRENTDBCOORDACTIVITIES 阈值)太小而进入死锁状态,请增大排队阈值。

如果因为应用程序正在等待由工作负载管理器许可控制管理的资源而进入死锁状态,请增大正在其中执行应用程序的最后一个语句的服务类的 resourceshare。 如果要帮助避免(涉及工作负载管理器许可控制管理的)资源的死锁,请关闭不再需要的 SQL 游标以减小应用程序中并行执行的 SQL 语句数。

如果目录成员处于再同步状态,请重试该请求。 目录成员必须先与整个集群再同步,然后它才能允许处理各个请求。

如果目录成员正在执行数据库更新操作,请重试该请求。

sqlcode:-911

sqlstate:40001

SQL0912N

已经达到数据库的锁定请求的最大数目。 原因码 = 原因码 由于用于锁定请求的内存不足,因此已达到数据库的最大锁定数。

原因码指示已达到的内存限制的类型:

1
局部锁定管理器内存,使用 LOCKLIST 数据库配置参数来配置。
2
全局锁定管理器内存,使用 CF_LOCK_SZ 数据库配置参数来配置。

无法处理该语句。

在提交其他 SQL 语句前,应用程序应该提交 COMMIT 或 ROLLBACK 语句。 请考虑增大原因码所指示的数据库配置参数的值,以支持更多锁定请求。

1
增大 LOCKLIST 数据库配置参数的值,此参数管理为局部锁定管理器所分配的锁定内存。
2
增大 CF_LOCK_SZ 数据库配置参数的值,此参数管理为全局锁定管理器所分配的锁定内存。

sqlcode:-912

sqlstate:57011

SQL0913N

死锁、超时或写冲突导致执行事务未成功。 原因码为 原因码 事务发出的请求涉及到未解决的对象争用情况,执行失败。

原因码如下所示:

2
由于死锁而导致分布式事务分支失败。
68
由于锁定超时而导致分布式事务分支失败。
80
由于超时而导致语句失败。
208
语句失败,因为数据库管理器检测到另一应用程序已修改要更新或删除的行。

根据数据库服务器或客户机的版本和平台的不同,此消息的正文和运行时标记可能有所变化。

  • 对于原因码 80,您可以再次尝试运行失败的语句而不用终止应用程序。 如果应用程序访问多个远程数据库,那么回滚事务来避免全局死锁的可能性可能更好。
  • 对于原因码 208,您可以重试失败的语句而不必终止应用程序,否则,请落实或回滚事务(如果有可能)。
  • 对于其他原因码,发出请求以回滚事务。 因为当前事务分支失败,所以事务不能落实。
  • 为了帮助避免死锁或锁定超时,如果可能,在长时间运行的应用程序或需要高度并发访问数据的应用程序里,频繁发出 COMMIT 操作。

sqlcode:-913

sqlstate:57033

SQL0917N

绑定程序包失败。 发生了阻止创建程序包的错误。

此 SQLCODE 可能会在绑定处理或落实处理期间发出。 如果是在落实处理期间发出,那么会回滚对数据库作出的所有更改。 如果是在绑定处理期间发出,那么只有程序包创建操作会失败,在该逻辑工作单元内作出的其他更改仍然可落实。

此问题通常是由于一个或多条 SQL 语句因错误而未被绑定引起的。

确定哪些语句导致错误并纠正这些语句。 重新发出该命令以创建程序包。

sqlcode:-917

sqlstate:42969

SQL0918N

应用程序必须执行回滚操作。 工作单元已在数据库中回滚,但此工作单元中涉及的其他资源管理器可能未回滚。 为了确保此应用程序的完整性,在应用程序发出回滚之前,所有 SQL 请求都会被拒绝。 在应用程序发出回滚之前,所有 SQL 请求都将被拒绝。 例如,在 CICS 环境中,这将是 CICS SYNCPOINT ROLLBACK 命令。

sqlcode:-918

sqlstate:51021

SQL0920N

不能从其他数据库客户机系统中访问数据库客户系统的数据。 已将工作站配置为客户机或具有本地客户机的服务器。 其他工作站不能共享在此系统中创建的任何数据库。

不能处理该函数。

仅从服务器工作站中请求数据。

sqlcode:-920

sqlstate:57019

SQL0925N

SQL COMMIT 对应用程序执行环境无效。

在下列情况下,不允许 COMMIT:

  • 在“分布式事务处理”环境中(例如,CICS)尝试执行静态 SQL COMMIT 语句,但是需要特定于环境的落实语句。 例如,在 CICS 环境中,这将是 CICS SYNCPOINT 命令。
  • 已经预编译或者设置为在“非 TP 监视器”环境中使用 CONNECT 2 的 DB2 应用程序发出了动态 SQL COMMIT 语句,但是,只允许静态 SQL COMMIT。
  • 当从存储过程中发出时,如果调用程序正在分布式工作单元或“分布式事务处理”环境中执行,那么也不允许 SQL COMMIT。

通过执行下列操作之一来更正问题:

  • 移除发出 COMMIT 的语句,并用作为环境的有效等价物的语句来替换它
  • 对于“非 TP 监视器”环境中 CONNECT 的 2 类连接,仅使用静态 COMMIT。
  • 对于存储过程,移除 COMMIT

sqlcode:-925

sqlstate:2D521

SQL0926N

SQL ROLLBACK 对于应用程序执行环境无效。

在下列情况下,不允许 ROLLBACK:

  1. 在“分布式事务处理”环境中(例如,CICS)尝试执行静态 SQL ROLLBACK 语句,但是需要特定于环境的回滚语句。 例如,在 CICS 环境中,这将是 CICS SYNCPOINT ROLLBACK 命令。
  2. 已经预编译或设置为使用 CONNECT 2 的 DB2 应用程序已发出动态 SQL ROLLBACK 语句,但是,仅允许静态 SQL ROLLBACK。
  3. 当从存储过程发出时,如果调用程序正在分布式工作单元(CONNECT 的 2 类连接)或“分布式事务处理”环境中执行,那么还将限制 SQL ROLLBACK。
  1. 移除发出 ROLLBACK 的语句,并用作为环境的有效等价物的语句来进行替换。
  2. 对于 2 类连接,仅使用静态 COMMIT。
  3. 对于存储过程,将它完全移除。

sqlcode:-926

sqlstate:2D521

SQL0930N

没有足够的存储空间可用来处理语句。 请求了需要其他内存页的数据库,但是,没有更多页可用于数据库管理器。

无法处理该语句。

可能的解决方案包括:

  • 验证系统是否有足够的实际内存和虚拟内存。
  • 移除后台进程。
  • 如果在 DUOW 再同步期间出错,请减小 RESYNC_INTERVAL 数据库管理器配置参数值。
  • 如果错误发生在引用例程(UDF、存储过程或方法)的语句上,那么可能是包含自变量和返回值所需要的存储量大于系统上的可用内存。 如果例程是使用 BLOB、CLOB、DBCLOB 参数或返回值定义的,具有很大的大小(例如 2GB),可能会发生此情况。

如果这些解决方案无法解决问题,那么可能需要考虑更改例程的定义。

sqlcode:-930

sqlstate:5UA0L 和 57011

SQL0931C

发生操作系统文件表溢出。 无法处理后续的 SQL 语句。 已达到操作系统的限制。 应用程序不允许发出附加的 SQL 语句。 数据库被标记为需要恢复,并且阻止使用数据库的所有应用程序访问该数据库。 终止使用数据库的所有应用程序。 重新启动数据库。

要帮助阻止问题的再次发生:

  • 将 MAXFILOP 数据库配置参数更改为较小的值(这将减少 DB2 对操作系统文件表的使用),和/或
  • 如果适当,那么终止其他正在使用文件的应用程序,和/或,
  • 请参阅有关增大操作系统文件表限制的操作系统文档。 在大多数 UNIX 环境中,这可通过用一个更大值更新内核配置来完成。 (在 AIX 上,只能通过增加机器中的内存量来使之成为可能)。

sqlcode:-931

sqlstate:58005

SQL0949N

UTL_FILE 模块例程尝试执行无效的操作系统操作。 操作系统错误:错误文本 UTL_FILE 模块例程尝试执行的操作导致操作系统返回 错误文本 所指示的错误。 请参阅操作系统错误消息信息,以确定如何解决 错误文本 所报告的问题。

sqlcode:-949

sqlstate:58024

SQL0950N

不能删除表或索引,因为当前正在使用。 当打开的游标正在使用表或索引时,不能发出 DROP TABLE 或 DROP INDEX 语句。

无法处理该语句。 未删除表或索引。

关闭任何需要的游标并重新提交该语句。

sqlcode:-950

sqlstate:55006

SQL0951N

类型为 object-type 的对象 object-name 无法更改,因为它目前正被同一应用程序进程使用。 当一个对象被锁定或者正在使用时,不能对该对象发出 ALTER、SET INTEGRITY 或 TRUNCATE 语句。

无法处理该语句。 未改变该对象。

关闭那些直接或间接依赖于对象 对象名 的任何游标并重新提交该语句。

sqlcode:-951

sqlstate:55007

SQL0952N

由于中断而取消处理。 用户可能按了中断键序列。

终止语句处理。 在发生终止之前,可能已对数据库应用了某些更改,但未落实。

如果由于查询超时而导致调用级接口(CLI)发出中断命令,那么您也会接收到此错误。 例如:如果应用程序使用 SQLSetStmtAttr() 函数将 SQL_ATTR_QUERY_TIMEOUT 语句属性配置为一个非零值,且 SQL 语句或 XQuery 表达式未在指定时间内完成,那么 CLI 就会发出中断指令以取消执行并返回到应用程序。

联合系统用户:数据源也可能会检测到此情况。

继续执行应用程序。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

如果您想阻止 CLI 在发生查询超时的情况下发出中断指令,那么可以通过在 db2cli.ini 文件中设置 QUERYTIMEOUTINTERVAL=0 来禁止查询超时行为。 除非在服务器中设置了死锁或锁定等待超时值,否则禁止查询超时行为就会允许查询完成运行。

sqlcode:-952

sqlstate:57014

SQL0954C

应用程序堆中没有足够的存储空间可用来处理语句。 使用了应用程序的所有可用内存。

无法处理该语句。

接收到此消息时,终止应用程序。 如果 applheapsz 数据库配置参数已设置为 AUTOMATIC,您将需要增大 APPL_MEMORY 数据库配置设置的值,或者增大 INSTANCE_MEMORY 数据库管理器配置设置的值。 否则,请增大 applheapsz 数据库配置参数的值以允许更大的应用程序堆。

更新配置参数时,建议更改这些参数的值。每次将它们增大当前大小的 10%,直到错误情况得到解决为止。 要更改 applheapsz,请输入一个类似如下的命令,该命令对数据库 样本 将 applheapsz 设置为 4000:

db2 UPDATE DB CFG FOR sample USING APPLHEAPSZ 4000 

如果所有相关联的配置参数都设置为 AUTOMATIC 或 COMPUTED,那么实例的内存需求将超过机器上配置的内存量。 可以采用的解决方案包括减少数据库工作负载、启用连接集中器功能部件或者向机器添加更多内存。

sqlcode:-954

sqlstate:57011

SQL0955C

不能分配排序内存来处理语句。 原因码:原因码 就像原因码所指示的那样,数据库代理程序没有足够虚拟内存可用,无法进行排序处理:

1
专用进程内存不足。
2
在数据库范围共享内存区中指定的共享内存不足以进行排序处理。
3
没有足够的共享内存可供对按列组织的表执行的查询使用。

无法处理此语句,但是可以处理其他 SQL 语句。

要对此消息作出响应,请执行与每个原因码相对应的操作:

1
在实例或系统级别增加可用的内存资源。 另外,也可以减少所配置的内存需求。 例如,减小数据库配置参数 SORTHEAP 的值。
2
在数据库、实例或系统级别增加可用的内存资源。 另外,也可以减少所配置的内存需求。 例如,减小数据库配置参数 SORTHEAP 的值。
3
增大数据库配置参数 SORTHEAP 的值。 可能需要增大更高级别的数据库配置参数(例如 SHEAPTHRES_SHR)的设置。

sqlcode:-955

sqlstate:57011

SQL0956C

数据库堆中没有足够的存储空间可用来处理语句。 使用了数据库的所有可用内存。

无法处理该语句。

接收到此消息时,终止应用程序。

增大数据库配置参数 dbheap 的值以允许更大的数据库堆。 如果 I/O 服务器数接近上限,那么减小此数目可能也会有所帮助。

如果 dbheap 数据库配置参数已设置为 AUTOMATIC,您将需要增大 DATABASE_MEMORY 数据库配置设置的值,或者增大 INSTANCE_MEMORY 数据库管理器配置设置的值。

更新配置参数时,建议更改这些参数的值。每次将它们增大当前大小的 10%,直到错误情况得到解决为止。 要更改 dbheap,请输入一个类似如下的命令,该命令对数据库样本将 dbheap 设置为 2400:

 db2 UPDATE DB CFG FOR sample   USING DBHEAP 2400 

要在已与数据库断开连接的情况下更改 dbheap,请输入一个类似如下的命令:

db2 CONNECT RESET; db2 UPDATE DB CFG FOR sample   USING DBHEAP 2400 

如果所有相关联的配置参数都设置为 AUTOMATIC 或 COMPUTED,那么实例的内存需求将超过机器上配置的内存量。 可以采用的解决方案包括减少数据库工作负载、启用连接集中器功能部件或者向机器添加更多内存。

sqlcode:-956

sqlstate:57011

SQL0958C

已达到最大打开文件数。 已经达到数据库可用的最大文件句柄数。

无法处理该语句。

增大影响在数据库位置上所允许的打开文件最大数目的任何参数。 这包括增大配置参数(maxfilop)的值以允许将更多文件句柄用于实例,以及终止其他会话以减少使用的文件句柄数。

sqlcode:-958

sqlstate:57009

SQL0959C

在服务器的通信堆中没有足够的存储空间可用来处理语句。 已使用在服务器通信堆中的所有可用内存。

不能处理该命令或语句。

接收到此消息时,终止应用程序。 增大服务器工作站数据库管理器配置文件中通信堆 ( comheapsz) 参数的大小。

注意:此消息仅适用于版本 2 之前的 DB2 发行版。

sqlcode:-959

sqlstate:57011

SQL0960C

在使用以下名称或标识表空间列表的表空间中创建的对象已达到最大数目。 由于已达到该表空间的最大对象数,因此无法在该表空间中创建新对象。 指定另一个表空间以便在其中创建该对象或表。 如果该表空间是 SYSTEM TEMPORARY 表空间,那么表示已使用了太多的并发临时表。

sqlcode:-960

sqlstate:57011

SQL0964C

数据库的事务日志已满。 已使用事务日志中的所有空间。

如果使用具有辅助日志文件的循环日志,那么尝试分配和使用这些日志。 当文件系统没有更多空间时,不能使用辅助日志。

如果使用归档日志,那么文件系统不提供空间来包含新日志文件。

当数据库几乎已用完所有可能的日志序号时,也会返回此消息。 数据库管理器使用称为日志序号 (LSN) 的唯一标识来标识数据库日志记录。 当事务导致写入数据库日志时,数据库将使用新的 LSN 值。

应用程序无法执行任何导致数据库写入日志记录的事务。

无法处理该语句。

在接收到此消息(SQLCODE)时,执行 COMMIT 或 ROLLBACK,或再次尝试执行该操作。

如果并发应用程序正在更新数据库,那么再次尝试执行该操作。 另一个应用程序完成事务后,可能会释放日志空间。

发出更频繁的落实操作。 如果事务还未落实,那么当落实事务时,可能会释放日志空间。 设计应用程序时,应考虑何时落实更新事务,以防止发生日志已满的情况。

如果发生死锁,那么更频繁地对它们进行检查。 这可以通过减小数据库配置参数 DLCHKTIME 来实现。 这将检测到死锁,并且很快解决(通过 ROLLBACK),这将释放日志空间。

如果经常发生这种情况,那么增大数据库配置参数以允许更大的日志文件。 更大的日志文件需要更多空间,但是减少了应用程序再次尝试执行该操作的需要。 可能需要调整的事务配置参数是 LOGFILSIZ、LOGPRIMARY 和 LOGSECOND。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

如果由于数据库几乎用完所有可能的 LSN 值而返回此消息,那么您可以通过执行以下操作将 LSN 值重置为零:

  1. 卸载数据库中的所有数据
  2. 删除并重新创建数据库
  3. 装入所有数据

sqlcode:-964

sqlstate:57011

SQL0965W

在此工作站上的消息文件中没有与 SQL 警告 sqlcode 相对应的消息正文。 该警告是从模块 名称 中返回的,原始标记为 标记列表 数据库服务器将代码 sqlcode 返回给应用程序。 警告代码与此工作站上的 DB2 消息文件中的消息不对应。 请参阅数据库服务器文档以了解有关所指定 SQLCODE 的更多信息。

SQL0966N

找不到或打不开“数据库连接服务”目录中指定的错误映射文件 名称

下列其中一个条件为真:

  • 错误映射文件不存在。
  • 错误映射文件当前被另一个应用程序打开。
  • 错误映射文件未定位于期望的路径中。
  • 错误映射文件被毁坏。

检索不到错误映射数据。

从打开文件的应用程序中释放文件,或者重新安装或复原原始文件。

sqlcode:-966

sqlstate:57013

SQL0967N

“数据库连接服务”目录中指定的错误映射文件 名称 的格式无效。 当程序读取错误映射文件时出错。

检索不到错误映射数据。

更正错误映射文件中的所有语法错误。

sqlcode:-967

sqlstate:55031

SQL0968C

文件系统已满。 包含数据库的其中一个文件系统已满。 此文件系统可能包含数据库目录、数据库日志文件或表空间容器。

在 DB2 pureScale 环境中,如果您正在将成员添加到数据库管理器实例,那么没有足够的磁盘空间来创建其他成员文件。

无法处理该语句。

通过擦除不想要的文件来释放系统空间。 不要擦除数据库文件。 如果需要附加空间,那么可能有必要删除标识为不必需的表和索引。

在基于 UNIX 的系统中,此磁盘满状态可能是由于超过当前用户标识所允许的最大文件大小所导致的。 使用 chuser 命令来更新 fsize。 可能必须进行重新引导。

当容器大小不相同时,可能会导致出现磁盘已满的情况。 如果文件系统中有充足的空间,那么删除该表空间并使用大小相等的容器重新创建。

如果无法处理的语句引用了 LOB 数据类型:

  • 确保在应用程序中使用的任何游标在使用后被立即关闭。
  • 确保应用程序中的 COMMIT 语句是周期性地执行的。
  • 对系统临时表空间添加其他容器,以便在执行此语句期间保留临时 LOB 数据。

在 DB2 pureScale 环境中,请通过擦除不需要的文件释放系统空间或者向文件系统添加容量,然后重新运行此命令。

sqlcode:-968

sqlstate:57011

SQL0969N

在此工作站上的消息文件中没有与 SQL 错误 错误 相对应的消息文本。 该错误是从模块 名称 中返回的,原始标记为 标记列表 数据库服务器将 SQLCODE 错误 返回给应用程序。 该错误代码与此工作站上的 DB2 消息文件中的消息不对应。 请参阅数据库服务器文档以了解有关所指定 SQLCODE 的信息。 执行数据库服务器文档中指定的操作来修正此问题。

联合系统用户:找出导致请求失败的数据源中的问题。 在数据源上的适用手册中查找 错误。 如果该问题与数据相关,那么可能有必要检查出错时正在数据源上处理的数据。

SQL0970N

系统尝试写入只读文件。 数据库使用的文件被标记为只读,或不存在。 数据库需要对此文件进行写访问。

无法处理该语句。

接收到此消息(SQLCODE)后就终止应用程序。 确保所有数据库文件都允许读和写访问权。 检查指定文件名中不必要的空格。

sqlcode:-970

sqlstate:55009

SQL0972N

数据库驱动器中是不正确的软盘。 驱动器中的软盘不是数据库软盘。

无法处理该语句。

将所需的软盘放入驱动器中。 如果应用程序开始使用驻留在软盘中的数据库,那么不要取出软盘。

sqlcode:-972

sqlstate:57019

SQL0973N

在 堆名 堆或堆栈中没有足够的存储空间可用来处理语句。 已使用此堆的所有可用内存。

无法处理该语句。

接收到此消息时,终止应用程序。 修改 堆名称 堆值以增大堆或堆栈大小。

如果 堆名称 设置为 AUTOMATIC,请增大 appl_memory database 数据库配置设置、database_memory 数据库配置设置或 instance_memory 数据库管理器配置设置。 否则,请修改 堆名称 堆值以增大堆大小。

程序包高速缓存和目录高速缓存具有软限制,对于这些高速缓存,您将需要增大 database_memory 数据库配置设置或 instance_memory 数据库管理器配置设置。

如果 堆名称 设置为 BigSQL IO,那么已超过 Big SQL Java 阅读器和写程序内存(java.lang.OutOfMemoryError 或 java.lang.StackOverflowError)。 在这种情况下,管理 JVM 的受防护方式进程 (FMP) 将标记为不稳定,并且将创建新的 FMP 来处理任何对 Big SQL Java 阅读器和写程序 JVM 的新请求。 如果频繁返回此错误,那么可能未正确配置系统来处理资源需求。 Java 阅读器和写程序 FMP 的缺省最大内存量 (-Xmx) 以 instance_memory 的百分比形式进行计算,所以可能需要增大此内存量。

如果将 database_memory 数据库配置参数设置为 AUTOMATIC,那么数据库管理器会自动管理数据库内存。

要增大应用程序共享堆大小,请增大 appl_memory 数据库配置设置或 instance_memory 数据库管理器配置设置。

更新配置参数时,最好是每次对值进行更改的幅度不要超过 10%,直到错误情况得到解决为止。

例如,假定 堆名称 是 util_heap_sz,数据库名称是 TORDB1。 要将此数据库配置参数更新为 10000,请运行以下命令:

  db2 update db cfg   for tordb1   using util_heap_sz 10000 

要查看数据库配置参数的列表,使用 GET DATABASE CONFIGURATION 命令。

要更新数据库管理器配置参数的值,例如,将 mon_heap_sz 更新为 100,请运行以下命令:

  db2 update dbm cfg   using mon_heap_sz 100 

要查看数据库管理器配置参数的列表,使用 GET DATABASE MANAGER CONFIGURATION 命令。

如果所有相关联的配置参数都设置为 AUTOMATIC 或 COMPUTED,那么实例的内存需求会超过机器上配置的内存量。 可以采用的解决方案包括减少数据库工作负载、启用连接集中器功能部件或者向机器添加更多内存。

sqlcode:-973

sqlstate:57011

SQL0974N

包含数据库的驱动器被锁定。 系统报告说明包含数据库的驱动器已锁定。

无法处理该语句。

确保系统上没有发生可以锁定驱动器的其他处理(例如,CHKDSK)。 再次尝试执行该操作。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

sqlcode:-974

sqlstate:57020

SQL0975N

不能启动新事务,因为数据库或实例 名称 被用户 用户名 停顿。 停顿类型:类型 另一个用户已停顿您正在尝试使用的实例或数据库,在实例或数据库不再处于停顿状态之前,不允许新事务。

停顿类型 类型 指的是已停顿的实例或数据库,对于实例是“1”,对于数据库是“2”。

与当前已停顿该实例或数据库的用户联系,以确定该实例或数据库何时将不再处于停顿状态,并在那时重试此请求。

sqlcode:-975

sqlstate:57046

SQL0976N

指定的 I/O 设备未就绪。 该 I/O 设备或介质未就绪,无法接受 I/O 命令。

无法处理该语句。

用户响应:

确保该 I/O 设备或介质就绪,然后再次尝试该操作。

sqlcode:-976

sqlstate:57021

SQL0977N

COMMIT 状态未知。 tm_database 在 COMMIT 处理期间已变得不可用,这已导致 COMMIT 的结果未知。 当 tm_database 可用时,将发生数据库再同步。 注意,在再同步期间,可能已回滚了事务。 可安全地进一步执行锁定 SQL 语句,但是,在完成再同步进程之前,锁定可能会被一直挂起。 验证是否可以连接 tm_database,例如,通过使用 CLP。 如果不能连接,那么遵循返回的 SQLCODE 所必需的操作以确保可以建立连接。

sqlcode:-977

sqlstate:40003

SQL0978N

存储介质处于写保护状态。 尝试对数据库执行写操作,但数据库存储介质处于写保护状态。

无法处理该语句。

验证是否正在使用正确的存储介质。 必要时,撤销对存储介质的写保护。

sqlcode:-978

sqlstate:55009

SQL0979N

对于运行时 SYNCPOINT 为 NONE 的应用程序进程,COMMIT 已对 数目 个数据库失败。 故障包括下列数据库别名和 SQLSTATE 对(最多可以返回四对):别名/SQLSTATE1别名/SQLSTATE2别名/SQLSTATE3 和 别名/SQLSTATE4 应用程序连接至多个数据库,发出了 COMMIT,但对于其中一个或多个这些连接失败。

联合系统用户:如果其中一个失败的连接是使用昵称的联合服务器数据库,那么对昵称所需的其中一个数据源进行落实失败。

根据应用程序和正在更新的数据的性质,用户可能希望停止正在执行的处理,记录故障,并发出适当的 SQL 以确保所涉及的所有数据库都一致反映应用程序预编译执行的更改。

如果不能返回受 COMMIT 错误影响的数据库的完整列表,请参阅完整列表的诊断日志。

sqlcode:-979

sqlstate:40003

SQL0980C

发生了磁盘错误。 无法处理后续的 SQL 语句。 发生磁盘错误,将阻止成功执行当前的和后续的 SQL 语句。 应用程序不允许发出附加的 SQL 语句。 例如,与应用程序相关的恢复例程不能发出附加的 SQL 语句。 数据库被标记为需要恢复,并且阻止使用数据库的所有应用程序访问该数据库。

无法处理该语句。

记录来自 SQLCA 的所有错误信息(如果有可能)。 终止使用数据库的所有应用程序。 确定错误是否是硬件错误。 重新启动数据库。 如果不能恢复,请从备份副本复原数据库。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

sqlcode:-980

sqlstate:58005

SQL0982N

发生了磁盘错误。 但是,可以处理后续的 SQL 语句。 在处理临时系统文件期间发生磁盘错误,将阻止成功执行当前的 SQL 语句。 但是,可以处理后续的 SQL 语句。

无法处理该语句。

接收到此消息(SQLCODE)后就终止应用程序。

sqlcode:-982

sqlstate:58004

SQL0983N

事务日志不属于当前的数据库。 存储在日志文件中的特征符与和数据库有关的特征符不匹配。 当用户指定的存储日志文件的目录与存储数据库的目录不相同时,通常会发生此错误。 可能涉及文件重定向。

无法处理该语句。

用对日志文件的正确访问权重新提交命令。

sqlcode:-983

sqlstate:57036

SQL0984C

COMMIT 或 ROLLBACK 不成功。 无法处理后续的 SQL 语句。 因为系统错误,而不能成功地处理落实或回滚操作。 应用程序不允许发出附加的 SQL 语句。 例如,与应用程序相关联的恢复例程可能不发出附加的 SQL 语句。 数据库被标记为需要恢复,并且阻止使用数据库的所有应用程序访问该数据库。

无法处理该语句。

记录消息号 (SQLCODE) 以及所有 SQLCA 错误信息(如果可能)。 终止使用数据库的所有应用程序。 重新启动数据库。 如果正在安装样本数据库,那么删除它并再次安装样本数据库。

如果不能恢复,请从备份副本复原数据库。

如果跟踪处于活动状态,那么在操作系统命令提示符处调用“独立跟踪设施”。 请与您的技术服务代表联系,并提供下列信息:

需要的信息:

  • 问题描述
  • SQLCODE
  • SQLCA 内容(如果有可能)
  • 跟踪文件(如果有可能)。

联合系统用户:找出导致请求失败的数据源中的问题,并对该数据源执行必需的诊断步骤和数据库恢复过程。 各个数据源的故障诊断过程和数据库恢复过程各有不同,因此请参阅适用的数据源手册。

sqlcode:-984

sqlstate:58005

SQL0985C

处理数据库目录时发生文件错误。 数据库不可用。 系统不能从目录文件上的 I/O 错误恢复。

系统不能处理使用数据库的任何语句。

从备份副本复原数据库。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

sqlcode:-985

sqlstate:58005

SQL0986N

处理用户表时发生文件错误。 此表不可使用。 表中的数据不再有效。

系统不能处理使用此表的任何语句。

如果数据库不一致,请从备份版本复原数据库。

如果正在安装样本数据库,那么删除它并再次安装样本数据库。

sqlcode:-986

sqlstate:58004

SQL0987C

不能分配应用程序控制共享内存集。

不能分配应用程序控制共享内存集。 导致此错误的原因是,数据库管理器或正在其中尝试数据库管理器操作的环境的内存资源不够。 可导致此错误的内存资源包括:

  • 系统中分配的共享内存标识数。
  • 系统中可用的调页空间量或交换空间量。
  • 系统中可用的物理内存量。

下列其中一项或多项:

  • 确保有足够的内存资源可用于满足数据库管理器的需求和在系统上运行的其他程序的需求。
  • 通过减小数据库配置参数 app_ctl_heap_sz 来减小此内存集对数据库管理器内存的需求。
  • 减小数据库配置参数 dbheap、util_heap_sz 和 buffpage 中的一个或多个。 请参阅管理指南,以了解影响分配的数据库全局内存量的参数。
  • 如果 intra_parallel 被设置为“是”,那么减小数据库管理器配置参数 sheapthres,否则将 intra_parallel 设置为“否”。
  • 在适当的地方,停止使用该系统的其他程序。

sqlcode:-987

sqlstate:57011

SQL0989N

AFTER 触发器 触发器名称 尝试了修改表 表名 中由 FROM 子句内的 SQL 数据更改语句修改的行。 在 FROM 子句中指定了 SQL 数据更改语句,但是 SQL 数据更改语句的底层目标基本表定义了将修改同一个表的 AFTER 触发器。 这是不允许的。

无法处理该语句。

避免在 FROM 子句中使用 SQL 数据更改语句,或者更改触发器以便使它不会修改是 SQL 数据更改语句的目标的表。

sqlcode:-989

sqlstate:560C3

SQL0990C

发生了索引错误。 请重组该表。 索引进行了可观的活动,使用了索引的所有可用空间。

联合系统用户:数据源也可能会检测到此情况。

无法处理该语句。

落实工作并再次尝试运行该命令。 如果错误继续,那么回滚工作。 如果错误仍存在,那么重组该表(如果有可能)。

联合系统用户:找出导致请求失败的数据源中的问题,并遵循为该数据源重新创建索引的过程。

SQL0992C

预编译的程序的发行版号无效。 预编译的程序(程序包)的发行版号与数据库管理器的已安装版本的发行版号不兼容。

预编译的程序 (package) 不能对数据库管理器的当前版本使用。 无法处理该命令。

只使用用兼容的数据库管理器发行版级别预编译的程序。

sqlcode:-992

sqlstate:51008

SQL0993W

数据库配置文件中日志 (newlogpath) 的新路径无效。

由于下列其中一种原因,日志文件的路径无效:

  • 该路径不存在。
  • 在指定的路径中找到了具有正确名称的文件,但它不是此数据库的日志文件。
  • 数据库管理器实例标识没有访问该路径或日志文件的许可权。

未完成请求的更改。

要更改日志文件的路径,提交带有有效值的数据库配置命令。

sqlcode:+993

sqlstate:01562

SQL0994N

应用程序保存点的用法无效。

不一致地使用了应用程序保存点功能。 该程序尝试执行下列其中一项操作:

  • 请求多个活动保存点。
  • 如果没有活动保存点,那么发出结束保存点调用。
  • 如果没有活动保存点,那么发出回滚保存点调用。

不能处理该函数。

更正程序中的保存点用法。

SQL0995W

日志文件 (logpath) 的当前路径无效。 日志文件路径被复位为缺省值。

由于下列其中一种原因,日志文件的路径无效:

  • 该路径不存在。
  • 在指定的路径中找到了具有正确名称的文件,但它不是此数据库的日志文件。
  • 数据库管理器实例标识没有访问该路径或日志文件的许可权。

对于循环日志记录,日志文件是在缺省日志路径中创建的。 对于归档日志记录,下一个日志文件是在缺省日志路径中创建的。 未完成请求的更改。

要更改日志文件的路径,提交带有有效值的配置命令。

sqlcode:+995

sqlstate:01563

SQL0996N

不能为表空间中的对象释放页面。 在表空间中存在毁坏的内部数据库页或内部逻辑错误。 停止使用对象或表空间。 与 IBM 服务中心联系,以检查对象和表空间。

sqlcode:-996

sqlstate:58035

SQL0997W

关于事务处理的一般参考消息。 原因码:XA-原因码

SQLCODE 997 仅在数据库管理器的组件之间传送,并且将不返回到应用程序。 它用于在没有错误的情况下传送 XA 返回码。 可能的原因码是:

  • XA_RDONLY (3) – 事务分支是只读的,已落实。
  • 64 – TM 数据库指示在 DUOW 再同步时要落实的事务
  • 65 – TM 数据库指示事务要在 DUOW 再同步时回滚
不需要执行任何操作。

SQL0998N

在事务或试探性处理期间出错。 原因码 = reason-code。 子代码:子代码 当处理分布式事务时,检测到错误。 事务是:

  • 在“分布式事务处理”环境(如 CICS 或其他事务管理器中的那些)下运行。
  • 执行试探性操作。
  • 更新联合数据库中的多个昵称,每个更新的昵称表示不同的数据源。 在此情况下,在事务处理期间,其中一个数据源失败。 在此情况下,返回的原因码为数据源上故障的原因,而不是联合数据库上故障的原因。

可能的原因码(对应的 X/Open XA 原因码显示在括号中)是:

  • 01 -(XAER_ASYNC)尚未完成异步操作。
  • 02 -(XAER_RMERR)在事务分支中发生资源管理器错误。
  • 03 -(XAER_NOTA)XID 无效。
  • 04 -(XAER_INVAL)给定的自变量无效。 可能的子代码为:
    • 01 – xa_info 指针无效,例如,XAOpen 字符串为 NULL。
    • 02 – 数据库名称超过最大长度。
    • 03 – 用户名超过最大长度。
    • 04 – 密码超过最大长度。
    • 05 – 指定了用户名,但没有指定密码。
    • 06 – 指定了密码,但没有指定用户名。
    • 07 – xa_info 字符串中的参数太多。
    • 08 – 多个 xa_open 为同一数据库名称生成不同的 RM 标识。
    • 09 – 未指定数据库名称。
    • 10 – exe_type 无效。
    • 11 – xa_config 文件中不存在 Sybase LRM 名称,或者 xa_config 文件不存在。
  • 05 – 在不适当的上下文中调用了(XAER_PROTO)例程。
  • 06 -(XAER_RMFAIL)资源管理器不可用。
  • 07 -(XAER_DUPID)XID 已经存在。
  • 08 -(XAER_OUTSIDE)RM 执行全局事务以外的工作。
  • 09 – 向事务管理器注册(ax_reg)失败。 可能的子代码为:
    • 01 – 找不到连接的 XID
    • 02 – 不能装入在 tp_mon_name 配置参数中指定的动态库。
  • 10 – 尝试在暂挂时启动另一个事务。
  • 12 – 向事务管理器注销(ax_unreg)失败。
  • 13 – ax 接口故障:找不到 ax_reg() 和 ax_unreg()。
  • 14 – 访问“Microsoft 分布式事务协调器”失败。 MSDTC 服务可能已关闭。 必须终止当前的事务。
  • 15 – 该事务不存在。
  • 16 -“Microsoft 分布式事务协调器”(MSDTC)发生了故障。 可能的子代码为:
    • 01 – 数据库管理器无法与 MSDTC 通信。
    • 02 – MSDTC 无法注册该连接。 该子代码表示 Microsoft 错误代码。
    • 03 – MSDTC 无法将该连接加入“分布式事务”中。 该子代码表示 Microsoft 错误代码。
    • 04 – 因为存在活动事务,所以无法加入该连接。
    • 05 – 不存在事务。 尚未加入连接。
  • 35 – 试探性操作对于非 XA 数据库无效。
  • 36 – 数据库管理器不知道 XID。
  • 37 – 已试探性地落实了事务。
  • 38 – 已试探性地回滚了事务。
  • 39 – 该事务不是不确定事务。
  • 40 – 此事务仅允许回滚。
  • 41 – 在某些 MPP 次级节点上,因为节点故障,而未试探性地落实事务。
  • 42 – DB2 Connect XA 支持仅可用于使用 TCPIP 来建立的出站连接。
  • 43 – 由于服务器不支持本地 XA,因此无法建立连接。
  • 69 – DUOW 再同步期间,数据库日志标识不匹配。
  • 85 – 作为试探处理的结果,部分落实并回滚了事务。
  • 210 – 此事务只允许试探性落实。 一些节点已处于落实状态。
  • 221 – 主机上的 DBMS 版本要求参与同一 XA 事务的所有应用程序使用同一用户标识来连接数据库。
  • 222 – 主机上的 DBMS 版本要求参与同一 XA 事务的所有应用程序具有同一 CCSID。
  • 223 – DB2 Connect XA 支持仅可用于使用 TCPIP 来建立入站连接的本地客户机或远程客户机。
  • 224 – DB2 Connect XA 支持仅可用于至少为 V7.1 的客户机。
  • 225 – 操作在“XA 松耦合事务”中无效。 可能的子代码为:
    • 01 – 不允许 DDL 语句。
    • 02 – 不允许指定 WHERE CURRENT OF 子句的更新和删除。
    • 03 – 不允许缓冲插入操作。
    • 04 – 此事务仅允许回滚。
    • 05 – 不允许隐式重新绑定操作。
  • 226 – 已回滚了事务。
  • 227 – 试探性请求应在协调程序节点上运行。
  • 228 – 存在打开的游标。
  • 229 – 先前事务尚未完成。
  • 230 – 已落实事务。
对于原因码 1 至 8,因为有时 SQLCA 不能返回到调用程序,所以将在系统日志中生成一个条目。

如果该错误由与昵称相关联的失败数据源引起,那么失败的数据源的位置将总是出现在联合服务器的系统日志中。

对于原因码 4,验证 xa open 字符串的内容并执行必需的更正。

对于原因码 4 子代码 11,应确保 xa_config 文件存在于 $SYBASE/$SYBASE_OCS 目录中,并且该文件中存在指定为 NODE 服务器选项的 LRM 名称。

对于原因码 9 子代码 02,确保 tp_mon_name 配置参数包含外部产品中动态库的名称,该外部产品将 ax_reg() 函数用于事务的动态注册。

对于原因码 14,确保 MSDTC 服务是活动的。

对于原因码 15,当 MSDTC 事务超时值太小时,就可能会发生这种情况。 增大超时值并查看该错误是否继续。

对于原因码 16:

  • 子代码 01,确保 MSDTC 服务是活动的。
  • 子代码 02,MSDTC 无法注册连接。 有关更多信息,请参阅 db2diag 日志文件或 Windows 事件查看器,以获取标题为 MicrosoftXARMCreate 的条目。
  • 子代码 03,MSDTC 无法将连接加入“事务”中。 有关更多信息,请参阅 db2diag 日志文件或 Windows 事件查看器,以获取标题为 MicrosoftEnlishWithRM 的条目。 最常见的错误是已显式或隐式回滚了当前事务。 当 MSDTC 事务超时太小时,可能发生这种情况。 增大超时值并查看该错误是否继续。
  • 子代码 04,尝试了加入当前在另一分布式事务中处于活动状态的连接。
  • 子代码 05,在尝试发出 SQL 语句之前加入连接。

对于原因码 35,尝试对全局事务中只充当只读资源管理器的数据库执行试探性操作。 示例是任何 DRDA 数据库,例如,DB2 MVS 版。 这些类型的非 XA 数据库将不会有任何 XA 不确定事务。

对于原因码 36、37 和 38,尝试对不确定事务执行无效的试探性操作。 您指定了错误的 XID,或在您记录此 XID 之后,已发生试探或再同步操作。 执行“试探性查询”请求以获取当前的不确定事务的列表,从而验证是否还需要执行试探性操作。

对于原因码 39,指定的 XID 用于已经结束并正在等待两阶段落实进程开始的事务。 只能对进入了两阶段落实过程并成为不确定事务的事务执行试探操作。

对于原因码 40,尝试在已失败的事务下执行 SQL 语句。 一个示例是,在事务线程中尝试 SQL 语句,而该事务线程已在参与同一事务的紧耦合线程异常终止之后成功注册。

对于原因码 41,可以在管理通知日志找到更多有关该问题的信息。 需要在失败的节点上重新启动数据库管理器。 可能有必要与系统管理员联系以获取帮助。

对于原因码 42,出站连接可通过修改网关目录以使用 TCPIP 通信协议来建立。

对于原因码 43,如果要连接至 DB2 for z/OS 服务器或 DB2 for i 服务器,请使用 DB2 Connect 对数据库进行编目,然后启动同步点管理器。

对于原因码 69,事务管理器(TM)数据库或资源管理器(RM)数据库或这两者与生成不确定事务时的 TM 和/或 RM 数据库不同。 换句话说,TM 数据库名称或 RM 数据库名称可能引用了不同的数据库实例。 日志标识不匹配可能是由下列原因造成的:

  • 在 RM 实例中 TM 数据库的数据库目录不正确。
  • 在生成不确定事务之后,配置可能已更改。
  • 可能已删除并重新创建了数据库。 在这种情况下,只能试探性地落实或回滚不确定事务。

对于原因码 85,您正在更新多个数据源,但其中一些数据源已被试探性回滚或落实,导致事务被部分落实或回滚。 因为此原因码,数据现处于不一致状态,您必须手动检查事务所更新的每个数据源以更正数据。

对于原因码 210,一些节点已处于落实状态。 必须执行试探性落实以解析不确定事务。

对于原因码 221,确保参与同一 XA 事务的所有应用程序使用同一用户标识来连接数据库。

对于原因码 222,确保参与同一 XA 事务的所有应用程序具有同一 CCSID。

对于原因码 223,修改应用程序和客户机设置以使用本地客户机,或者,对于远程客户机,将 TCPIP 用作通信协议以连接网关。

对于原因码 224,将客户机更新为 V7.1 或更高版本。

对于原因码 225,确保应用程序不包含“XA 松耦合事务”中的任何无效操作。 可使用“XA 松耦合事务” 的常见应用程序服务器环境有 IBM Encina Transaction Server、IBM WebSphere Application Server、Microsoft Transaction Server 和 BEA Tuxedo。 如果您遇到此原因码,那么必须复查应用程序并确保未执行所指示的任何操作。

对于原因码 226,事务已达到回滚状态,现在正在此节点上回滚。

对于原因码 227,试探性请求应在协调程序节点上运行,请参阅 db2diag 日志文件以了解协调程序节点号。

对于原因码 228,在发出该请求之前,确保游标已关闭。

对于原因码 229,在发出该请求之前,确保先前事务已完成。

对于原因码 230,已落实事务。

一般信息收集过程:

如果不能解决原因码标识的问题,那么记录消息号(SQLCODE)、原因码和消息中的可选子代码或系统日志中的 SQLCA。

如果故障源于联合数据库,那么还应记录在联合服务器的系统日志中找到的失败数据源的位置。

如果跟踪处于活动状态,那么在操作系统命令提示符处调用“独立跟踪设施”。 然后,请与技术服务代表联系,并提供以下信息:

  • 问题描述
  • SQLCODE、嵌入式原因码和子代码
  • SQLCA 内容(如果有可能)
  • 跟踪文件(如果有可能)
  • 如果该故障源于联合服务器,还应提供失败的数据源的位置。

在事务管理器和数据库管理器的控制台或消息记录中可能有更多信息。

sqlcode:-998

sqlstate:58005

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注