Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91764652
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-21 00:09:04

作者:oldbank  出处:
-286        主键字段<字段名>的缺省值是NULL。

作为主键一部分的字段不能有null作为它的缺省值。

-287        不能增加序列字段<字段名>到表中。

不能将数据类型SERIAL的字段加到存在的表中。这样的字段不能含有null值,但当增
加一个字段时,数据库服务器必须把null值放入所有存在的行中。可以用三步增加序
列字段。首先用一个INTEGER数据类型增加该字段。然后把非null的、唯一值放入新字
段的每一行中,更新表。最后,使用ALTER TABLE MODIFY改变该字段的数据类型为
SERIAL。

-288        表<表名>未被当前用户锁定。

这条UNLOCK TABLE语句命名一个还没有被锁定的表。如果你早些时候锁定该表,那么
它已经被解锁。在事务处理结束或数据库关闭时,表自动解锁。如果另一个用户锁定
表,你不能解开它的锁。

-289        不能以需求的方式锁定表<表名>。

该表已经以排它方式锁定。必须在处理之前等待该表解锁。

-290        游标没有用FOR UPDATE子句说明。

这条语句试图用未被说明用于修改的游标来修改。由于为防止程序错误而设计的安全
度量和性能特征的原因,数据库服务器不允许这种操作。为了使用有UPDATE或DELETE
语句的游标,必须说明它以便修改。检查程序逻辑以确信在这条语句中使用想要用的
游标。

在符合ANSI标准的数据库中操作时,任何游标可以被用于修改;不需要FOR UPDATE
子句(会产生一个警告)。

-291        不能改变表的锁定方式。

当前的LOCK TABLE语句不能被执行,因为已经用不同方式(EXCLUSIVE或SHARE)
锁定同一个表。为改变锁定方式,在再次锁定之前要对这个表解锁。

-292        隐含的插入字段<字段名>不接收NULL。

这条INSTER语句不对表中的所有字段提供值。至少忽略了一个字段限制不能为null。
因为数据库服务器必须为每个未提及的字段插入null值,它不能执行这种插入。对照
表的定义检查语句。可能表的定义已经改变。

-293        IS [NOT] NULL的谓词只能被简单字段使用。

对于null值的测试可只适用于<字段名>(例如不适用于带下标字符的字段或表达式)
。检查WHERE子句中关键字的用法。

-294        字段<字段名>必须在GROUP BY列表中。

在分组的SELECT中,必须在GROUP BY子句中列出每个非统计字段,以确保在每一分组
行中每个选定的字段有定义好的值。一个字段或是包含一个统计值,或是包含对那个
组来说是唯一的值。如果选定的字段既不是统计值又不在列表中,在同一组中可能那
个字段有两个或多个值,数据库服务器不能选择要显示哪一个。修正查询以便在该子
句中包含该字段名或它的位置号。

-295        被参考表和参考表必须在相同的数据库中。

参考限制不能跨数据库。换言之,被参考字段和参考字段(或父键和子键)必须在相
同数据库中。

-296        被参考表<表名>没找到。

在参考限制中指定的被参考表不存在。

-297        不能找到对参考表<表名>的唯一限制和主键。

数据库服务器不能把参考的限制放在sysconstraints系统目录表中,参考的限制不是
在相同的ALTER TABLE语句中作为参考限制创建的。参考的限制不存在。检查是否输
入有相应限制的有效字段名。有效的限制字段说明了一个内部错误。如果错误再次发
生,请记录详细情况并与Informix技术支持部联系。

-298        不能用授予选项授予public权限。

子句WITH GRANT OPTION允许接受者授予他人相同权限的授权。在这种情况下,授权的
接受者是PUBLIC。如果执行这条语句,每个人将有该权限,而且每个人能授权。该权
限禁止这种操作。或者指定被授予者,或者删除子句WITH GRANT OPTION。

-299        不能授予本身权限。

这条GRANT语句把你的用户id作为一个被授予者。如果你能授予该权限,你就已经有该
权限。检查语句,从TO子句去掉你的用户名。

-300        有太多的GROUP BY字段。

在GROUP BY子句中可以列出的字段数是数据库服务器的实现限制。所有数据库服务器
至少支持8个字段。检查当前语句,确信GROUP BY子句的标点是正确的。如果是你想象
的,你就必须寻找用两步或两步以上做这件事的办法。因为所有非统计的选择字段必
须在 GROUP BY子句中列出,而列表的长度受限制,就必须只选择区别每组所必须的
非统计值。把该组的结果放入一个临时表,把这个表连接到原来的表以选择其它
非统计值。

-301        GROUP BY字段的总数太大。

数据库服务器限制在GROUP BY子句中列出的组合字段的字节总数。所有数据库服务器
至少支持120个字节。更多的信息参考错误 -300的讨论。

-302        对多表视图没有GRANT选项或选项非法。

这条GRANT语句不能被执行。无权为这个表授予指定的权限,表名是一个别名;或该表
是一个视图,对它不能授予这个选项。为了授予某表任意权限,你必须有这个数据库
的DBA的权限,必须是这个表的所有者,或者被授予相同权限WITH GRANT OPTION。
如果符合其中之一,有问题的表的确是一个不能修改的别名或视图,因此不能用于
插入、修改或删除操作。

-303        表达式把字段和统计函数混淆。

这条SELECT语句在它的WHERE子句中使用统计函数。这种操作是不允许的。WHERE
子句必须在表被扫描时逐行使用,而统计函数只能在所有行被选出和分组后计算。检
查该语句是否这样做了。如果只打算选择某组记录,可以把这样的测试放在HAVING
子句中,它适用于已分组的行。

这条信息的文本有些易使人误解的地方。事实上,你能够在表达式中把字段名和统计
函数混合使用。然而,你只能在选择列表或HAVING子句(不是在WHERE子句)中
做这件事,字段必须出现在GROUP BY子句。

版本5.01后的数据库服务器中不使用这条错误信息。

-304        HAVING只能有统计或GROUP BY子句中的字段的表达式。

HAVING子句用于在分组后选择完成的行。因此它能测试的唯一选择值是能在完成的分
组行中得到的值,名义上是在GROUP BY子句中命名的单值字段和统计值。检查HAVING
子句是否符合这种规则。如果要在分组进行之前选择具体的行,可以使用WHERE子句。

-305        有下标的字段<字段名>不是类型CHAR, VARCHAR, TEXT ,也不是BYTES。

只能从所述类型的字段选择子串。检查在这条语句中使用的所有方括号,确信每个方
括号遵循有这些类型之一的字段的命名。如果是这种情况,检验你使用的是你想要的
数据库,重复检查该表的定义。可能表中的一个字段已经改变,使用了不同的类型。

-306        下标超出范围。

这条语句参考一个字符变量的子串。子串的值(在方括号中的两个数)是不正确的。
第一个小于零或大于字段的长度,或者第二个小于第一个。检查语句中使用的所有方
括号,找出错误。可能是改变了某字段的字长,使子串工作时失败。

-307        不合法的下标定义。

这条语句参考一个字符变量的子串。子串的值(在方括号中的两个数)是不正确的。
第一个小于零或大于字段的长度,或者第二个小于第一个。检查语句中使用的所有方
括号,找出错误。可能是改变了某字段的字长,使子串工作时失败。

-308        对于每条UNION语句,相应的字段类型必须是一致的。

在SELECT语句的UNION中产生的所有行必须有相同的格式。因此每个字段应该有相同
的数据类型。在当前语句中,在第二条或接下去的SELECT中的某字段和前面的SELECT
中的同一字段不一致。检查和比较所有SELECT语句。核对选择的东西与前面的SELECT
语句不相同的语句的每一个地方。在UNION期间不提供自动的数据转换;数据类型在
选择时必须相同。如果不可能,考虑建立临时表并使用一系列INSERT语句来与想要的
行结合以作补充。在INSERT期间提供自动的数据转换,因此这样有差别但兼容的
数据类型可以被改成相同类型。

-309        ORDER BY的字段<字段名> 必须在SELECT列表中。

所示的字段出现在这条SELECT语句的ORDER BY子句中,但它不在选择列表(词SELECT
之后的值列表)中。这种操作是不支持的。所有分类键必须以分类的顺序出现在输出
行中。修改语句使之符合这一规则。如果只想对涉及这个字段的表达式排序,不是对
字段本身,则可以在列表中按它的位置号参考表达式。

-310        数据库中已存在表<表名>。

这条语句试图创建所示名字的一个表,但那个名字的表已经存在。在一个数据库中只
能存在一个给定名称的表。(在符合ANSI标准的数据库中,表是由创建它的用户的名
称限定的,因此每个用户只能有一个给定名称的表。)

检查那个名称的拼写,如果与你所想的一样,你应确认它不存在,确认你正在使用的
数据库是你所想的。你可以通过查询如下的systables,检查在这个数据库中的所有表
名。

SELECT tabname FROM systables WHERE tabid > 99

该语句将只显示永久表的名字,而没有临时表的名字。临时表不出现在systables
中。如果该名字不出现,结束数据库会话并启动新的数据库,临时表将被取消。
阅读(527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~