SQL0500 - SQL0749

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 约束名 的插入或更新值不等于父表的任何父键值。

说明

正在设置对象表的外键中的值,但此值不等于父表的任何父键值。

在将一行插入从属表时,外键的插入值必须等于关联关系的父表的任何行的某些父键值。

类似地,更新外键的值时,外键的更新值必须等于该语句完成时关联关系的父表的任何一行的父键值。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

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

无法执行该语句。对象表的内容未更改。

用户响应

首先检查外键的插入或更新值,然后将该值与父表的每一个父键值作比较,以确定并更正问题。

sqlcode:-530

sqlstate:23503

SQL0531N 不能更新关系 约束名 的父行中的父键。

说明

某个操作尝试更新父表行中的父键,但在 约束名 约束中,指定行中的父键在从属表中有与其相关联的从属行。

当约束 约束名 的更新规则为 NO ACTION 时,如果父行在语句完成时有任何从属行,那么不能更新父行中父键的值。

当约束 约束名 的更新规则是 RESTRICT 时,如果在尝试更新父键时父行有任何从属行,那么不能更新父行中父键的值。

联合系统用户:约束可以存在于数据源上(如果子表和父表存在于该数据源上)。

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

无法执行该语句。父表的内容未更改。

用户响应

检查对象表的父键和从属表的外键,以确定是否应该更改父键的指定行的值。 如果这未显示问题,那么检查对象表和从属表的内容来确定并更正问题。

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 因为对于 对象类型-2,绑定选项 DYNAMICRULES RUN 无效,所以 对象类型-1 对象名称-1 不允许 语句 语句。

说明

程序尝试发出指示的 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
statement

SQL 语句出错

对象类型-1

PACKAGE 或 DBRM。DBRM 仅在 DRDA 连接中有效。

对象名-1

如果 对象类型-1 是 PACKAGE,那么 对象名-1 是程序包的名称,格式为“location-id.collection-id.package-id”。如果 对象类型-1 是 DBRM,那么 对象名-1 是 DBRM 的名称,格式为“plan-name DBRM-name”。

对象类型-2

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 选项的服务器

可以在联合服务器和/或数据源中执行所需的授权。

某些数据源没有为运行时标记 授权标识操作对象名 提供适当的值。在这些情况下,消息标记可能具有下列其中一种格式:

  • <数据源> AUTHID:UNKNOWN
  • UNKNOWNM
  • <数据源> :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 授权标识 没有执行操作 操作 的特权。

说明

授权标识 授权标识 尝试在没有正确权限的情况下执行指定的 操作

联合系统用户:某些数据源未向 授权标识 和 <操作> 提供适当的值。在这些情况下,消息标记将具有如下格式:“<数据源> AUTHID:UNKNOWN”和“UNKNOWN”,指示指定数据源上授权标识和操作的实际值未知。

无法处理该语句。

用户响应

确保 授权标识 有执行该操作的权限。

联合系统用户:可在联合服务器和/或数据源处执行此授权。

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 因为 授权标识 具有控制特权,所以尝试从 授权标识撤销特权被拒绝。

说明

授权标识具有控制特权。要撤销的特权是 由控制 特权隐式提供的,因此,除非同时撤销控制特权,否则不能将其撤销。

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 并未授予所请求的对类型为 对象类型 的对象 对象名 的所有特权。

说明

对类型为 对象类型 的对象 对象名 尝试了“授权”(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 对于表 表名 中的列 列名,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 子句中
  • 在过程定义的全局变量或参数的缺省表达式中

无法处理该语句。

用户响应

如果不打算使用不确定的或外部的操作例程或表达式,那么以一个没有这些特征的例程来替代。如果要执行与不确定的或外部的操作例程或表达式相关的行为,请使用意图明确的语句替代格式。

  • 不使用 BETWEEN 谓词,而是使用相对应的语句,该语句使用比较谓词的等价组合(a>=b and a<=c,而不是 a between b and c)。
  • 不使用简单 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 在上下文 上下文标签 中指定的名称 名称 不是唯一的。

说明

名称 名称 被指定为由 上下文标签 定义的上下文中的参数、SQL 变量、游标、标号或条件。该名称不是唯一的。

如果 上下文标签 是 “BEGIN...END”,那么错误的上下文是动态 SQL 复合语句。否则,错误的上下文是触发器或例程,而 上下文标签 是包含复合语句的触发器名或例程名。

  • 如果 名称 是参数名,那么在参数列表和例程的 EXPRESSION AS 子句中它必须是唯一的。
  • 如果 名称 是状态变量名,那么在状态变量列表中它必须是唯一的。
  • 如果 名称 是 SQL 变量名、游标名或条件,那么在复合语句中它必须是唯一的。
  • 在复合语句中标号必须是唯一的,且与它嵌套在其中的语句的标号不同。

用户响应

更改该名称,以使它唯一。

sqlcode:-590

sqlstate:42734

SQL0593N 必须为“行更改时间戳记”列、“行开始”列、“行结束”列或者时间段的列指定 NOT NULL。列名

说明

“行更改时间戳记”列、“行开始”列和“行结束”列不支持空值。在 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 要创建的对象的名称与类型为 类型 的现有的名称 名称 相同。

说明

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 的名称已存在时出错。

联合系统用户:某些数据源未向 名称类型 消息标记提供适当的值。在这些情况下,名称类型 将具有以下格式:“对象:<数据源> 表/视图”;如果为“未知”,那么表示所指定的数据源中的实际值未知。

如果 类型 为“许可权”,那么 名称 是在 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 表。

不能对保留模式中的任何表执行联机管理移动表操作。

无法处理该语句。

用户响应

除了可通过可更新 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。

如果指定 名称,那么它是主键或唯一约束的约束名。如果未指定约束名,那么 名称 是主键或唯一约束子句中指定的第一个列名,后跟三个句点。

索引键长度限制基于索引使用的表空间的页大小:

最大键长度      页大小
--------------  ---------
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 函数返回的列的和超过索引键长度限制,所以未能创建索引扩展。

索引键长度限制基于索引使用的表空间的页大小:

最大键长度      页大小
--------------  ---------
1K              4K
2K              8K
4K              16K
8K              32K

无法处理该语句。未创建指定的索引或索引扩展,或者未能改变表或昵称。

用户响应

要修改索引定义或改变列,可消去一个或多个键列,并将键长度减小为允许的最大值。对于索引扩展定义,指定另一 GENERATE KEY 函数,或者重新定义该函数以减小所返回的行的长度。

sqlcode:-614

sqlstate:54008

SQL0615N 不能删除类型为 对象类型 的对象 对象名,因为它当前正被使用。

说明

当对象的 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 名称 无效(原因码:原因码)。

说明

因为 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 对语句 语句类型 中的关键字 关键字 指定的值无效。

说明

关键字 关键字 后面跟随着 语句类型 的描述允许的无效值。对于数值,该值可能超过定义的范围。对于其他类型,该值不在有效值的定义集中。

用户响应

根据 语句类型 的引用文档来确定哪些是有效值并进行适当的更改。

sqlcode:-644

sqlstate:42615

SQL0647N 缓冲池 缓冲池名 当前不活动。

说明

缓冲池 缓冲池名 在当前数据库环境中不活动。尝试查找另一页大小相同的缓冲池,但在当前数据库环境中没有这样的活动缓冲池。缓冲池 缓冲池名 是最近定义的,但尚未激活。

无法处理该语句。

用户响应

必须停止并再次启动该数据库,以激活所需的缓冲池。

sqlcode:-647

sqlstate:57003

SQL0648N 不能定义外键,因为它将导致经过多个路径的表 所有者-1.表名-1 到表 所有者-2.表名-2 的连接被删除。原因码:原因码

说明

因为下列其中一种原因码:原因码,所以不能定义外键:
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

尝试将影子表的基本表中的列更改为影子表的基本表中不支持的数据类型。

用户响应

按照原因码的指示更正 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 不允许对表 表名 执行操作,原因码为 原因码

说明

限制对表 表名 的访问。原因基于下列原因码 原因码

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

具有非分区索引的表具有新的数据分区,该操作正在尝试在创建了该分区的添加或连接操作所在的事务中访问该分区,但该事务没有以互斥方式来锁定该表。

用户响应

根据原因码对此错误作出响应:

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

修改应用程序,以便在应用程序访问其中目标表具有非分区索引的新分区之前落实包含添加或连接分区操作的事务。或者,修改应用程序,以便在创建了新分区的添加或连接操作所在的事务中访问该分区时,以互斥方式锁定具有非分区索引并受到联机添加或连接操作影响的表。

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 文字 文字 必须与列 列名 的数据类型 数据类型 兼容。

说明

为 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 触发器 触发器名 的定义包括相关名或转换表名 名称 的无效使用。原因码:原因码

说明

触发器定义中无效使用了 名称原因码 值标识以下问题:

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 尝试使用 程序包版本(其中此版本已经存在)替换程序包 程序包模式.程序包名

说明

尝试使用 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.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 对用户 授权标识 执行 绑定命令 时出错。程序包 程序包名 不存在。

说明

针对不存在的程序包发出了绑定或重新绑定。如果指定了 ACTION REPLACE 并且 REPLVER 选项指定了不存在的版本,那么将发生错误。
绑定命令
发出了绑定命令类型(BIND | REBIND)。注意值“BIND”也将用于预编译。
授权标识
发出绑定或重新绑定的授权标识。
程序包名
格式为“pkgschema.pkgname.pkgversion”的程序包的名称。如果程序包版本是空字符串,那么名称省略“.pkgversion”。

未绑定或重新绑定程序包。

说明

检查 SYSCAT.PACKAGES 目录视图以了解要在 REPLVER 选项中指定的正确的“pkgschema.pkgname.pkgversion”。

sqlcode:-722

sqlstate:42704

SQL0723N 触发器 触发器名 中触发 SQL 语句出错。对该错误返回的信息包括 SQLCODE sqlcode、SQLSTATE sqlstate 和消息标记 标记列表

说明

在触发器 触发器名 的执行期间,该触发器中的 SQL 语句失败。提供了 sqlcode、sqlstate 和消息标记列表(每个标记由竖线字符分隔)。消息标记可能被截断。请参阅 sqlcode 的相应消息以获取该错误的进一步解释。

不能处理触发器和导致执行触发器的原始 SQL 语句。

用户响应

检查与失败的 SQL 语句的 SQLCODE 相关联的消息。遵循该消息所建议的操作。

sqlcode:-723

sqlstate:09000

SQL0724N 类型为 对象类型对象名 的激活将超出间接 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 名为 例程名(特定名称 特定名称)的例程失败,这是因为该例程在尝试对名为 表名 的表执行操作 操作 时违反了嵌套 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