- 论坛徽章:
- 0
|
贴个Informix错误代码中文解释供大家参考
-208 在查询处理中分配内存失败。
数据库服务器需要分配数据空间内存以处理查询,但不能得到内存。这个错误可能反
映了硬件上的限制,或是操作系统配置上的限制,或是临时的空间短缺。
在一段延迟后再次执行该查询。如果仍然失败,向你的系统管理员咨询。如果可能的
话,修订你的查询,联结较少的表或是对较少的字段排序或分组,或是使用两个或多
个语句来完成查询。在DOS系统中,退出到操作系统命令行,释放一些磁盘空间,或是
减少你的程序的复杂性,并重新提交你的程序。
在5.01后的版本中,只有这条错误信息通知你数据库服务器不能分配内存。
-209 不兼容的数据库格式。
一个过时版本的数据库软件建立了这个数据库。转换这个数据库才能被当前的软件处
理。使用dbupdate实用工具。在使用数据之前你必须运行它(从Version4.0开始这条信
息已不存在)。
-210 显式的路径名太长。
这个语句包含的一个文件路径名超过了64个字符的最大长度。检查该语句以确定
路径名是否确实太长;也可能是一个标点错误使得语句的其它部分也被包含进了
路径名里。如果不是这样,请重新放置文件或者用较短的路径名重新命名
某些目录名。
-211 不能读取系统目录<目录表>;。
数据库服务器在处理大多数语句时参照系统目录表。当不能读取这些重要的表时就产
生了严重的错误。检查伴随的ISAM错误代码以获得更多的信息。错误的影响取决于正
在执行的语句和特定的表,如下所示。
* CREATE TABLE语句,systabauth不能读取;该表可以被建立,但不能象正常
情况一样授权给PUBLIC。
* DROP TABLE语句,systables不能读取;不做任何动作。
* DROP TABLE语句,sysviews不能读取;该表将被取消,但任何依赖于该表的
视图将不能被自动取消。
* DROP VIEW语句,sysviews不能读取;不做任何动作。
* DROP INDEX语句,systables或sysindexs不能读取;不做任何动作。
* DROP SYNONYM语句,systables或syssynonyms不能读取;不做任何动作。
* DROP DATABASE语句,systables不能读取;不做任何动作。
* START DATABASE语句,systables不能读取;不做任何动作。
* DATABASE语句,systables或sysusers不能读取;该数据库不被选中
(没有当前数据库,后来的操作见错误-349)。
其它语句可能在错误被侦测出来之前已经部分完成了。滚回当前的事务并调查错误的
原因。使用实用工具bcheck或secheck(INFORMIX-OnLine的tbcheck或INFORMIX-
OnLine动态服务器的oncheck)来检查或修复索引。如有必要,从备份和逻辑日志磁带
上恢复数据库。
-212 不能增加索引。
这个语句试图增加一个索引,可能是显式地通过CREATE INDEX,或是隐含地作为对多
个无索引表的SELECT的处理的一部分。不管在哪种情况下,某些错误阻止了索引的建
立。请检查伴随的ISAM错误代码以获得更多的信息。产生这个问题的一个常见的原因
是磁盘空间不足。
-213 语句被用户中断。
数据库服务器接收到用户发出的一个中断信号,可能是由于用户按下了中断键(通常是
Delete键或Control-C)。语句提前结束。程序应滚回当前的事务并友好地结束。如果
该语句可能修改表,交互式用户应该执行ROLLBACK WORK以取消任何不完全的修改。
-214 不能给表<表名>;删除文件。
数据库服务器不能完全地删除该表。检查伴随的ISAM错误代码以获得更多的信息。
操作系统的文件访问权限问题,只读文件和硬件错误可能引发这个错误。
-215 不能为表<表名>;打开文件。
数据库服务器不能打开操作系统文件或存储该表处的文件。请检查伴随的ISAM错误
代码以获得更多的信息。操作系统的文件访问权限问题,内存不足和硬件错误可能
引发这个错误。
-216 不能删除文件的ISAM索引。
数据库服务器不能完全地删除一个索引。检查伴随的ISAM错误代码以获得更多的
信息。操作系统的文件访问权限问题,只读文件和硬件错误可能引发这个错误。
-217 在查询中未在任何表内发现字段<字段名>;。
该字段名出现在这个查询的选定列表或是WHERE子句中,但在表中未定义。检查选定
的表的名字是否拼写得与你所预期的相同。如果是这样的话,或是你正在使用不正确
的数据库,或是该数据库已被改变;可能是某个字段已被改名或清除。为了列出表内
全部字段,见对错误-328的讨论。
-218 同义字<同义字名>;未找到。
同义字在这个数据库中未被定义。检查同义字名是否拼写得如你所预期的。检查你正
在使用你所希望用的数据库。如果是这样的话,该同义字可能被取消了。该同义字可
能是在它所在的表被取消时被自动取消了。为了显示所有被定义的同义字,查询
systables,如下所示:
SELECT tabname FROM systables WHERE tabtype = `s'
-219 通配符匹配不能用于非字符类型。
这个语句的WHERE子句中包含了对一非字符字段的测试,该测试使用了关键字LIKE
或MATCHES,并使用了代表多重字符的特殊字符,(例如在MATCHES中使用星号和问
号,或是在LIKE中使用百分号和下划线)。只对数据库中被定义为CHAR或VARCHAR
的字段才使用这类测试。不提供自动的数据转换。检查WHERE子句中的字段正是你所
希望的。如果是这样的话,表的定义可能被修改过了。
-220 查询中没有FROM子句。
每一个SELECT语句必须包括一个FROM子句来为表或将被查询的表命名。检查FROM
是否拼错,或有额外的分号意外插在语句尾端。即使只选择一个常数,或选择与任何
表格无关的函数值(例如USER或TODAY等),你也必须为表命名。你可以从系统目录
选择一已知的行,例如:
SELECT 'today is', TODAY,'and I am', USER FORM systables WHERE tabid=
100
数据库中,第一个用户定义的表格的 tabid值总是等於100,因此,如果有表格已
被定义,这个查询总会回复一行。(在4.1版及以后版本,若没FROM子句,会发出-201
语法错误。)
-220 不能开始保存点。
从版本4.1开始可以侦测到的内部错误。如果该错误再次出现,请记录下所有的环境并
与Informix 技术支持部联系。
-221 不能建立新表<表名>;的临时文件。
数据库服务器不能建立一个临时磁盘文件。该文件应在环境变量DBTEMP指定的目录下
被创建。如果DBTEMP没有定义,在缺省情况下,数据库服务器在根目录下搜索名为tmp
的子目录,并在该目录下建立临时磁盘文件。检查伴随的ISAM错误代码,并查看操作
系统信息以获得更多的信息。可能是你的帐户没有在该目录下写的许可,也可能是磁
盘已满。从版本5.01开始,INFORMIX-SE数据库服务器就已使用环境变量DBTEMP,但
INFORMIX-Online动态服务器没有使用。
-222 不能写新表<表名>;的临时文件。
数据库服务器建立了一个临时磁盘文件,但当试图写该文件时发生了一个错误。请检
查伴随的ISAM错误代码,并查看操作系统信息以获得更多的信息。在UNIX系统中,
该文件应在环境变量DBTEMP所指定的目录下被建立(缺省值为 /tmp);在DOS系统中,
该文件应位于当前目录下。可能是磁盘已满,或是发生了硬件错误。从版本5.01
开始,INFORMIX-SE数据库服务器就已使用环境变量DBTEMP,但INFORMIX-Online
动态服务器没有使用。
-223 在FROM子句中重复的表名<表名>;。
表名在关键字FROM之后的列表中出现两次。检查语句看看你是否想第二次命名其它
一些表。如果你的意图是使表自连接,第二次和以后表的实例必须使用表的别名。
下例表明查找有相同名字的顾客的一种方法:
SELECT main.lname, main.customer_num, sub.customer_num
FROM customer main, customer sub
WHERE main.lname = sub.lname AND main.rowid != sub.rowid
在使用表的别名时(上例中的字main和sub),该表可以两次或多次选择。
-224 不能打开事务日志文件。
数据库服务器不能打开进行事务日志登录的文件。在这个文件修复之前,不能启动任
何事务处理。(在符合ANSI标准的数据库中,什么事情也不能做;在其它数据库中,
只能做查询。)对INFORMIX OnLine动态服务器,向OnLine管理员报告这种问题。对其
它数据库,检查伴随的ISAM错误代码,查看操作系统错误信息,它可能给出更多的信
息。START DATABASE语句指定了到日志文件的路径。如果文件已经删除,可以重新建
立它作为一个空文件。如果路径已经改变,可以发布新的START DATABASE语句来重新
定义它。
-225 不能为系统目录<表名>;创建文件。
数据库服务器(不是OnLine)试图对系统目录创建表,可能作为CREATE
DATABASE语句的一部分。可能存在主机操作系统禁止的问题。更多的信息请检查伴随
的ISAM错误代码,查看操作系统错误信息。磁盘空间不足和操作系统文件访问权限的
问题可能产生这个问题。
-226 不能为系统目录<表名>;创建索引。
数据库服务器(不是OnLine)试图对系统目录创建表,可能作为CREATE DATABASE语句
的一部分。它创建该表但存在主机操作系统禁止它建索引的问题。更多的信息请检查
伴随的ISAM错误代码,查看操作系统错误信息。磁盘空间不足可能产生这个问题。
-227 禁止对ROWID进行DDL操作。
这条语句试图改变名为ROWID的字段。该字段是每个表的一部分,除被分段存储的表
外。你可以用SELECT语句中选择它并在WHERE子句中比较,但不可以用DDL语句更改
它。
-228 禁止对ROWID进行UPDATE或INSERT。
这条语句命名字段列表中的字段ROWID用于插入或修改。rowid是不能修改的固有特
性。你可以在SELECT语句中选择它并在WHERE子句中比较,但不可以语句修改它的内
容。
-229 不能打开或创建临时文件。
数据库服务器不能创建一个临时磁盘文件。应该在由DBTEMP环境变量指定的目录(或
在UNIX系统上由缺省指定的/tmp)中创建临时文件。检查伴随的ISAM错误代码,查看
操作系统错误信息,它可能给出更多的信息。可能你的帐户已经没有在那个目录中写
的权限,可能磁盘已满。从版本5.01开始,INFORMIX-SE数据库服务器就已使用环境变
量DBTEMP,但INFORMIX-Online动态服务器没有使用。
-230 不能读取临时文件。
数据库服务器在由DBTEMP环境变量指定的目录(或在UNIX系统上由缺省指定的/tmp)
中创建临时文件,但是在试图把文件读回时发生错误。检查伴随的ISAM错误代码,
查看操作系统错误信息,它可能给出更多的信息。可能出现了硬件故障,可能另一个
用户意外地删去临时文件。从版本5.01开始,INFORMIX-SE数据库服务器就已使用
环境变量DBTEMP,但INFORMIX-Online动态服务器没有使用。
-231 不能用关于表达式的distinct执行聚集函数。
这条语句在聚集函数内选择DISTINCT (表达式)。这个动作是不支持的。选择
DISTINCT 值和其它字段进入一个临时表,然后从那个表选择ALL运用聚集函数。
-232 SERIAL字段<字段名>;不能修改。
你不能用UPDATE语句中的数据类型SERIAL更改字段内容,即使修改的值是零。(在使
用INSERT语句时可以为序号字段指定零值;数据库服务器不理睬零而插入一个生成的
数。)修正语句以便只修改非序号字段。
-233 不能读取被其它用户锁定的记录。
其它用户已经锁定由这条语句选出的行。如果你交互地执行该语句,可以做两件事之
一。 可以等待一会儿再输入这条语句,或执行语句SET LOCK MODE TO WAIT,
之后你将很难再看见这条信息。
在一个程序中,你应该滚回当前事务处理,等待随机的间隔,再运行该事务。如果你
用WAIT的LOCK MODE运行事务,就能减少这种错误的频率,但它在某些情况下仍会出
现,例如当发现死锁时。该错误通常伴随一个ISAM错误代码,-107, -113, -134,
-143, -144或-154,程序可以对每种错误做出不同响应。
-234 不能插入虚拟字段<字段名>;。
这条INSERT语句指向一个视图,而不是一个真正的表,在视图中定义的一个字段实际
上是一个表达式的值。不允许对有这种字段的视图进行插入和修改。对视图所依赖的
真正的表运用INSERT。
-235 字符字段的宽度太大。
这条语句对宽度大于32,767的字段或宽度超过255的VARCHAR字段指定了CHAR
数据类型。如果你需要这种大小的字段,就使用TEXT数据类型,它允许无限长。
否则,检查语句是否印刷错误。
-236 在INSERT中字段数与VALUES的数目不匹配。
在INSERT语句中命名或采用的每个字段必须分别有值表达式。如果语句没有列出特定
的字段,检查表的定义,或字段的数量及其数据类型。也检查VALUES子句中表达式的
列表是否没有多余的或遗漏的逗点,它们可能会导致错误的赋值数量。要特别小心长
字符串和带括号的表达式。
-237 不能进行开始工作。
数据库服务器不能执行BEGIN WORK语句。更多的信息请检查伴随的ISAM错误代码。
在访问事务日志时可能发生问题。
-238 不能进行提交工作。
数据库服务器不能执行COMMIT WORK语句。更多的信息请检查伴随的ISAM错误代码。
在访问事务日志时可能发生问题。
-239 不能插入新行 — 在UNIQUE INDEX字段中有重复值。
正在被插入(或修改具有新的主键)的行在限制必须有唯一值的字段中,包含已经存
在的某些行的重复值。该行不能被插入。滚回当前事务处理,没有任何重复行后再执
行它。
-240 不能删除行。
数据库服务器不能完成DELETE语句的执行。滚回当前的事务处理;然后,检查伴随的
ISAM错误代码,得到更多的信息。
-241 不能进行滚回工作。
数据库服务器不能执行ROLLBACK WORK语句。更多的信息请检查伴随的ISAM错误
代码。在访问事务日志时可能发生问题。
-242 不能打开数据库表< 表名>;。
数据库服务器不能开始读取表。更多的信息请检查伴随的ISAM错误代码。问题可能是
在文件权限,硬件错误,或被损坏的系统目录等方面。除非ISAM错误代码或操作系统
信息指出其它原因,否则运行bcheck或secheck实用工具来检验文件的完整性。
-243 不能在表< 表名>;内定位。
数据库服务器不能对代表某表的文件内的实际行设置文件位置。更多的信息请检查伴
随的ISAM错误代码。硬件错误可能发生,或文件可能被损坏(截断)。除非ISAM
错误代码或操作系统信息指出其它原因,否则运行bcheck或secheck实用工具来检验文
件的完整性。
-244 不能按物理顺序读来取得下一行。
数据库服务器不能读取包含一个表的某行的磁盘页。更多的信息请检查伴随的ISAM
错误代码。可能硬件有问题,或表文件或索引文件可能被损坏。除非ISAM错误代码或
操作系统信息指出其它原因,否则运行bcheck或secheck实用工具来检验文件的
完整性。
-245 不能通过索引在文件内定位。
数据库服务器通过索引寻找数据行时遇到错误。更多的信息请检查伴随的ISAM错误
代码。表文件或索引文件可能被损坏。除非ISAM错误代码或操作系统信息指出其它
原因,否则运行bcheck或secheck实用工具来检验文件的完整性。
-246 不能按带索引的读得到下一行。
数据库服务器通过索引寻找数据行时遇到错误。更多的信息请检查伴随的ISAM错误
代码。表文件或索引文件可能被损坏。除非ISAM错误代码或操作系统信息指出其它
原因,否则运行bcheck或secheck实用工具来检验文件的完整性。
-247 前滚数据库失败。
数据库服务器不能提供审计跟踪来向前滚动数据库。更多的信息请检查伴随的ISAM
错误代码。
-248 不能提交保存点(savepoint)。
在版本4.1以上的产品中能侦测到这个内部错误。如果错误重复发生,请记录详细情况
并与Informix技术支持部联系。
-249 虚拟字段必须有显式名。
在选择INTO TEMP时你正在创建一个表。在用任何表时,临时表的字段必须都有名称。
当你选择单个字段时,临时表中的该字段接收相同的名字。当你选择表达式时必须提
供使用字段别名的名称,如下例所示:
SELECT order_num, ship_date, ship_date + 14 expected
FROM orders
INTO TEMP ord_dates
临时表ord_dates有三个字段,分别命名为order_num,ship_date和expected。同一原
则亦用于视图:每个字段必须有一个名字。当你从表中选出视图的每个字段时,根据
缺省,视图可以有相同的字段名。当你从表达式派生视图的任何字段时,所有字段必
须给出显式名称,如下例所示:
CREATE VIEW ord_dates(order_num, ship_date, expected) AS SELECT
order_num, ship_date, ship_date + 14 FROM orders
-250 不能从文件读取记录用于修改。
数据库服务器在修改之前不能得到某表的数据行。更多的信息请检查伴随的ISAM
错误代码。其它用户可能已经锁定该行或表,或者存在更严重的问题。
-251 ORDER BY或GROUP BY的字段号太大。
ORDER BY或GROUP BY子句使用字段顺序号,至少其中之一大于选择列表的字段数目。
检查你输入的子句是否正确,选择列表是否没有丢失项目。
-252 不能得到表的系统信息。
数据库服务器不能从一个或多个系统目录表读。更多的信息请检查伴随的ISAM错误
代码。除非ISAM错误代码或操作系统信息指出其它原因,运行bcheck或secheck实用
程序,检验文件的完整性。
-253 标识符太长 — 最大长度是18。
语句中的一个名字超过最大长度。检查名字的长度,并检查是否有印刷错误导致两个
名称一起运行。
-254 给出太多或太少宿主变量。
你在这条语句的INTO子句中命名的宿主变量的数量与写入该语句的"?"位置标识符的数
目不匹配。定位该语句的正文(在PREPARE或DECLARE语句中),并检验位置标识符的数
目。然后检查在INTO子句中的列表,看看哪个项目不正确。
-255 不在事务中。
数据库服务器不执行该COMMIT WORK或ROLLBACK WORK语句,因为没有执行BEGIN
WORK来启动一个事务。由于没有事务启动,你就不能够结束它。对数据库所作的任何
修改都固定不变;它们不能滚回但不需要提交。检查SQL语句的顺序,看看事务应该在
什么地方开始。
-256 事务不能用。
不能在这个数据库中开始一个事务,因为它没有事务日志。为了支持事务,必须启动
一个事务日志。使用INFORMIX-OnLine动态服务器时,OnLine管理员使用DB-Monitor
或ON-Monitor的Logical Logs菜单的Databases屏幕来开始一个事务日志。而使用其它
数据库服务器时,则用START DATABASE语句。
-257 关于最大语句数的系统限制超过 — 最大是<计数值>;。
数据库服务器只能为每个用户处理固定数量的准备SQL语句。这种限制包括用PREPARE
准备的语句和用DECLARE说明的游标。这个语句(PREPARE, DECLARE或PREPARE
IMMEDIATE)超过那个限制。该语句不被执行。FREE语句释放准备语句。检查程序逻辑
并修改它,以便在不需要时释放准备语句。
5.0版以后的数据库服务器没有这种限制。然而,必须与早先版本兼容的程序仍应在
这个限制之下使用FREE。
-258 系统错 — sqlexec 进程收到无效的语句标识符。
当前的语句(EXECUTE 或 OPEN)引用了一个准备的SQL 语句或者不存在的游标。
产生的原因可能是该语句标识符无效,或者该语句是准备好的、但被 FREE 语句
释放了。检查程序的逻辑,确保该语句中命名的语句或游标是有效的、是正确地
准备或声明好的、而且没有在这之前被释放掉。
如果程序成功地执行了一句准备的 DATABASE 语句,数据库服务器将自动释放这句
准备的语句。因此,如果释放了准备的 DATABASE 语句,会在FREE 语句上收到这条
错误信息。在这种情况下,可以不理睬它。
-259 游标没打开。
当前语句使用了一个游标但它没有被打开。检查程序逻辑看它在此之前为何不能执行
OPEN语句。结束事务的语句(COMMIT WORK和ROLLBACK WORK)也关闭游标,
除非游标被说明为WITH HOLD。
-260 不能执行已PREPARE的SELECT语句 — 必须使用游标。
虽然可以准备一条SELECT语句,但是能执行SELECT语句的唯一办法是把它的语句id与
一个游标联系(使用DECLARE语句)然后打开游标。
一个重要的例外是 SELECTINTO TEMP 语句,你可以执行它,却不能借助游标
使用它。
你可以用EXECUTE语句执行其它准备语句。如果你在写程序时已经知道这条SELECT
语句的内容,并且确知它只返回单一数据行,就可以把它嵌入程序。如果它必须在程
序运行时动态地准备,那么修改程序以通过游标来执行它。
-261 无法建立表<表名>;的文件。
通常,数据库服务器无法建立描述这个表的文件。检查附带的ISAM错误代码以获得更
多信息。此文件将用INFORMIX-SE建立在数据库dbs 目录下(除非你已提供了IN<路径
名>;语句)。它的文件名将以<表名>;的前几个字母开头,后面是三位数字和后缀.dat或
.idx。对于INFORMIX-SE,问题可能出在文件权限方面,或可能是磁盘满了。
INFORMIX-OnLine动态服务器允许分段存储,这会引起dbspaces的扩展使用。你需要检
查为该表指定的dbspace。如果没有指定的dbspace,那么建立数据库的dbspace将被使
用。为建立数据库,如果没有指定的dbspace,那么使用rootdbs。对于OnLine,指定
的dbspace可能不存在,或磁盘满了。
-262 没有当前游标。
这个内部错误不应该发生。记录使用中的网络软件的所有细节以及本台或其它主机系
统中的数据库服务器版本号。如果重复发生错误,请记录详细情况并与Informix技术
支持部联系。
-263 不能锁定行用于UPDATE。
这条语句失败,可能是命名游标的FETCH语句说明了FOR UPDATE,因为该语句取得的行
不能被锁定。请检查伴随的ISAM错误代码(通常是错误 -107, -113, -134, -143,
-144或-154)可获得更多的信息。有可能另一程序正在用该行(-107)或表(-113)。可
使用 SET LOCK MODE TO WAIT将消除这些错误,但检测死锁 (-143或-154)和锁定的表
满(-134) 仍会发生。
-264 不能写入临时文件。
数据库服务器在由DBTEMP环境变量指定的目录(或在UNIX系统上由缺省指定的/tmp)
中创建临时文件,但在试图向文件写入数据时会发生错误。检查伴随的ISAM错误代
码,查看操作系统错误信息,它可能给出更多的信息。可能已经有硬件故障,也可能
磁盘已满。从版本5.01开始,INFORMIX-SE数据库服务器使用DBTEMP环境变量,但
INFORMIX OnLine动态服务器不使用。
-265 装入或插入游标必须在一个事务内运行。
试图打开一个insert游标。这个数据库有一个事务日志。在这样的数据库中,在打开
用INSERT语句或用FOR UPDATE子句说明的游标之前,必须执行BEGIN WORK语句。
修正程序的逻辑,以便在打开游标之前程序开始一个事务。
在没有事务日志的数据库中也可确保程序工作,把程序按如下办法修改。紧接在执行
DATABASE语句之后,把SQLAWARN警告标志数组的第二单元的内容保存在SQL通信区中。
如果数据库没有使用事务,该单元将是空,而如使用事务,将包含字母W。在每一事务
逻辑上开始和结束点,测试保存的值。如果含有W,执行事务语句开始或结束一个事
务。
-266 UPDATE/DELETE游标没有当前行。
当前语句使用WHERE CURRENT OF <游标名>;子句,但该游标还没有与当前行发生联系。
要么从它被打开开始还没有执行FETCH语句,要么是最近的fetch发生错误,这样就没
有行返回。修正程序的逻辑,以便在执行这条语句之前总能成功地取得数据行。
-267 游标已经先释放,不能用。
FREE语句已释放在这条语句中命名的游标所连接的资源。在能够使游标之前,必须再
次准备与它相关联的SQL语句。如果游标用FOR语句说明,它的DECLARE必须被重新
执行。如果它用FOR一个语句的id说明,必须重新执行PREPARE语句。
-268 唯一限制<限制名>;违法。
在执行这条语句期间,重复的值引入受唯一性限制保护的字段。不允许有重复值的行
进入表中(不能插入或修改)。对于OnLine数据库服务器,在发现重复值之前由这条
语句做的任何改动已被滚回。(然而,在事务中先于语句的影响,如果有的话,仍然
起作用,必须明确地滚回或提交。)
-269 不能增加不接收null的字段<字段名>;。
这条语句申请有NOT NULL限制的新字段,然而,当某字段加到已有的表中时,null
值正好要被装入已存在的行中。必须定义包括这个字段的新表,然后从旧表把数据
INSERT这个表以便为这个字段提供合适的非null值。
-270 不能放在临时文件内。
数据库服务器在由DBTEMP环境变量指定的目录(或在UNIX系统上缺省指定的/tmp )
中创建文件,要在文件中定位(寻找)时碰到一个错误。检查伴随的ISAM错误代码,
查看操作系统错误信息以便获得更多的信息。可能是硬件故障,或另一个用户已经
截断文件。从版本5.01开始,INFORMIX-SE数据库服务器使用DBTEMP环境变量,
INFORMIX OnLine动态服务器不使用。
-271 不能把新行插入这个表。
这个问题可能有许多原因,包括锁定的表或满磁盘。更多的信息请查看伴随的ISAM
错误代码。
-272 没有SELECT权限。
创建这个表的人没有授予Select权限给你的帐户名或public。必须在表的所有者或DBA
授予这个权限后,你才能从该表选择数据。
-273 没有UPDATE权限。
创建这个表的人没有授予Update权限给你的帐户名或public。必须在表的所有者或DBA
授予这个权限后,你才能修改该表的数据行。
-274 没有 DELETE权限。
创建这个表的人没有授予Delete权限给你的帐户名或public。必须在表的所有者或DBA
授予这个权限后,你才能删除该表的数据行。
-275 没有INSERT权限。
创建这个表的人没有授予Insert权限给你的帐户名或public。必须在表的所有者或DBA
授予这个权限后,你才能向该表插入数据行。
-276 没有发现游标。
在这个语句中命名的游标没有在当前会话期中说明。当前会话期从一个DATABASE
语句到下一个DATABASE或CLOSE DATABASE语句之间运行。检查程序的逻辑保证它
在DATABASE语句之后执行这个游标的DECLARE语句。
版本5.01以后的数据库服务器不使用这条错误信息。
-277 UPDATE表<表名>;和游标的表不相同。
UPDATE WHERE CURRENT OF<游标名>;语句参考的表不同于用游标说明的SELECT语句
参考的表。请检查程序逻辑确保这一点:在通过游标进行修改时,它只修改游标正在
读的表。
-278 ORDER BY的字段太多。
此SELECT语句要求的字段超过数据库服务器所能支持的。这个限制视所用的数据库服
务器而定,但处理分类上都最多只到8个字段。更新这个语句以便要求较少的字段。
4.0及以後的版本对ORDER BY的字段数没有特别的限制。当执行排序操作时复杂的排
序工作会使数据库服务器用尽内存或磁盘空间。
-278 不能滚回保存点。
4.1及以后版本的产品能检测这一内部错误。如果反复发生错误,请记录详细情况并与
Informix技术支持部联系。
-279 不能授予或取消表或视图的数据库权限。
这条语句命名一个或多个数据库级权限 (CONNECT, RESOURCE和 DBA),但是它也使用
ON <表名>;子句。没有描述具体表的语句(不包含ON子句)必须授予或取消数据库级的
权限。表级权限如INSERT需要ON子句。这两种不能混合在同一语句中。
-280 带引号的字符串超过256个字节。
这个语句中有字符文字超过允许的最大值。审查该语句,检查其中所有带引号字符串
的长度和标点。可能遗漏两个引号,使两个短字符串成为一个长串。必须修改语句使
用更短一些的字符串。
-281 不能把索引加到临时表中。
检查伴随的ISAM错误代码,找出具体问题,然后查看操作系统错误信息以求得到更多
信息。可能是磁盘满了。
-282 发现一个引号没有相匹配的引号。
审查当前语句,检查带引号的所有字符串的标点。为了将引号放在文字字符串中,用
一些单撇号作为字符串的分隔符。如下例所示:
SELECT ' " ', fname, ' " '," ' ' ", lname, " ' ' " FROM customer
-283 发现没有终结的注释("{"和"}"不匹配)。
审查当前语句并查注释及带引号字符串的标点。可以使用大括号将注释插入SQL语句,
但大括号必须成对出现。或者,可以用双连字符附注释于行后。
-284 子查询实际不是返回一行。
用于表达式的子查询在文字值的位置上必须只返回单行和单个字段。在这条语句中,
一条子查询的返回超过一行,数据库服务器不能选择哪个返回值用于表达式。可使子
查询总是只返回一行。使用WHERE子句,对有唯一索引的字段测试相等性。或是只选择
统计函数。检查子查询并检查它们只返回一行。
这个错误在使用单一SELECT语句来检索多行时也可能发生。必须使用
ECLARE/OPEN/FETCH语句系列,或EXECUTE INTO语句来检索多行。
-285 无效的游标被sqlexec接收。
在这条语句中使用的游标没有适当地说明或准备,否则就是FREE语句已经释放它。
检查程序逻辑,保证游标已经说明。如果是,并且该DECLARE语句参考一个语句id,
检查被参考的语句已经准备。
-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
中。如果该名字不出现,结束数据库会话并启动新的数据库,临时表将被取消。
-311 不能打开系统目录<表名>;。
数据库服务器不能访问系统目录中的一个表。有关原因的详细信息请见伴随的ISAM
错误代码,并查看操作系统的错误信息,那里可能给出更多的信息。
-312 不能修改系统目录<表名>;。
数据库服务器不能记录所示系统目录表中的变动。有关原因的更详细信息,请检查
伴随的ISAM错误代码。一个常见的原因是缺少磁盘空间。
-313 不是表的所有者。
这条语句试图做某些事,例如取消一个表,这只能由表的所有者或有数据库管理员权
限的用户才能做。要确认语句中的表名是你所想的表。如果是,就必须是该表的所有
者或DBA,以便执行这条语句。为了查知与谁联系,可以查询如下系统目录。
SELECT tabname, owner FROM systables WHERE tabid >; 99; SELECT username
FROM sysusers WHERE usertype = 'D'
-314 表<表名>;现正在使用。
这条语句试图做某些事,例如取消一个表,在其它用户使用这个表时,这件事不能
做。等待一会儿再试试。为了确认没有表在使用,用DATABASE EXCLUSIVE打开数据
库。
-315 没有创建索引的权限。
这条语句试图为一个表创建索引。或是没有对这个表授予INDEX权限,或者该表本身是
一个视图或别名。如果命名的这个表确实是一个表,与表的所有者或数据库管理员联
系(见错误 -313的讨论)并请求授予这种权限。
-316 数据库中索引< 索引名>;已经存在。
这条语句试图用所示的名字创建一个索引,但那个名字的索引已经存在。在一个数据
库中只能存在一个给定名称的索引。(在符合ANSI标准的数据库中,创建索引名的用
户名限定了这一点,因此每个用户只能有一个给定名称的索引。)检查名称的拼写,
如果与你所想的一样,你应确认它不存在,确认你正在使用正确的数据库。你可以通
过联结如下的systables和sysindexes,检查所有索引的名字和它们的所有者。
SELECT T.tabname, I.idxname, I.owner FROM systables
T, sysindexes I WHERE I.tabid = T.tabid AND
T.tabid >; 99
-317 在每个UNION单元里所选的字段数必须相同。
在一个联合中产生的所有行必须有相同的格式。因此在联合中的每条SELECT语句必须
选择相同的字段数。在这个联合中第二条或接下去的SELECT语句列出的字段数和前面
的不相同。检查整个联合,并检查所有选择列表的数量和数据类型都一样。如果其中
一条语句没有相应的字段,在那个位置指定相应类型的文字值。例如,在需要匹配数
值字段的地方,指定一个文字零。
-318 和指定的日志文件有相同名称的文件已经存在。
在WITH LOG IN子句中指定的事务日志文件不能已经存在。数据库服务器必须启动新的
日志文件;它不能把日志数据附加到旧日志文件。已存在的日志文件包含可能是很关
键的恢复信息,因此它不是简单地清空已存在的文件。为了对以前还没有登录过的数
据库开始登录:锁定数据库;把所有数据库目录拷贝到备份介质;并使用START
DATABASE语句命名新文件。为了顺序地存档:锁定数据库;把所有日志文件拷贝到备
份介质并存储它作为完整的档案;擦去或重命名日志文件;使用START
DATABASE语句。
-319 索引不在ISAM文件中。
这条语句参考不存在的索引。(参考无关的ISAM文件,不予理睬。)检查索引名的拼
写,如果正确并确实存在,确认是在使用正确的数据库。
在符合ANSI标准的数据库中,不属于自己所有的索引必须由它的所有者名限定。检查
所有索引的名称和所有者的办法,见错误 -316的讨论。
-320 不是索引的所有者。
这条语句试图做只能由索引的所有者或有数据库管理员权限的用户做的事情,例如取
消索引。确认该语句命名你想要的索引。如果正确,你就必须是它的所有者或DBA,
才有权执行这条语句。关于列出索引的名称和所有者的办法,见错误 -316的讨论。
-321 不能用统计字段分组。
这个语句中的GROUP BY子句参考所选的值是统计函数的值。这种操作是不支持的(在
形成分组之前,不能计算分组使用的值)。能够按照字段或字段表达式的值把数据行
分组,但表达式不能包括统计函数。检查GROUP BY子句,把它和选择列表比较。可能
是GROUP BY子句中一个字段数有错误。
-322 不能创建、更改或重命名视图<视图名>;的触发器。
可以只在一个表上创建触发器。考虑在取得视图的表上创建触发器,或者考虑作为表
创建视图<视图名>;,然后在其上创建触发器。
如果对视图使用START VIOLATIONS TABLE语句或STOP VIOLATIONS TABLE语句
也能收到该信息。两个语句中都必须指定基表的名字。
-323 不能对临时表授予权限。
GRANT语句命名临时表。这种操作是不支持的。只对永久表记录权限。因为临时表不在
系统目录中记录,没有地方来记录它们的权限。只有创建临时表的人能访问它。
-324 二义性字段<字段名>;。
说明的字段名出现在这个查询的FROM子句里列出的多个表中。数据库服务器需要知道
要用哪些字段。修正查询语句,使在查询中出现这个字段名的地方用它的表名做前缀
(<表名>;.<字段名>;)。如果这样写使语句太长,就在FROM子句中给表起一个短一些的
别名(举例见错误 -316的讨论)。
-325 文件名必须用全路径名指定。
如在试图用WITH LOG IN子句创建一个表,但没有对注册文件指定全路径时发生这个错
误。如果使用INFORMIX-SE来创建数据库登录而又没有指定注册文件的全路径,也会发
生这个错误。确认已指定全路径名,包括指出注册文件常驻地方的名称。
-326 参考限制有太多的被参考字段。
指定的参考限制多于16个字段(或INFORMIX-SE中8个字段)。
-327 不能解事务内表<表名>;的锁。
在事务内,即在执行BEGIN WORK之后,不允许有命令UNLOCK TABLE。在使用事务时,
可能还在使用LOCK TABLE,但是在事务结束时,所有表将被自动地解锁,因为所有锁
在事务结束时被释放。在符合ANSI标准的数据库中不使用BEGIN WORK,事务总是起作
用,决不要使用UNLOCK TABLE语句。
-328 表中已经存在字段<字段名>;。
这个语句试图加入所说明的字段,但该名字的字段已经存在。检查名称的拼写;如果
是你想要的,则该表不是如你所期望的安排。通过查询syscolumns,可以检查表中的
所有字段。用如下查询提供表名。
SELECT colname, colno FROM syscolumns C, systables T
WHERE C.tabid =T.tabid AND T.tabname =`table-name'
可以使用RENAME COLUMN改变字段名。
-329 数据库没有找到或没有系统权限。
试图打开的数据库在数据库服务器中找不到。检查名称的拼写。可能是数据库放在不
同的数据库服务器(或网络系统),而你忽略了指定有该数据库名的服务器名(或节
点名)。如果确认数据库如你拼写的那样存在,下一步就取决于正在使用的数据库
了。
如果使用的是INFORMIX-SE,看得见的数据库是在形如<数据库名>;.dbs中的目录名。必
须对它们可读可写。数据库服务器首先在当前工作目录查看,然后是在DBPATH环境变
量中命名的每个目录。这个错误的最常见原因是不正确设置或没有设置DBPATH环境变
量。
如果使用的是INFORMIX OnLine动态服务器,按所拼写的数据库不存在。在某些环境
中,可能有一次运行两个或更多的OnLine的实例,每个实例有它自己的数据库集合。
对于版本6.0或以后版本,INFORMIX SERVER环境变量决定使用哪个INFORMIX OnLine
动态服务器的实例。对于版本5.01或更早的版本,TBCONFIG环境变量指出配置文件,
它决定使用哪个INFORMIX -OnLine的实例。如认为可能在使用错误的OnLine实例,请
找OnLine管理员。
-330 不能建立数据库。
可能试图用与已存在的数据库相同的名称建立一个数据库。如果是这样,选择不同的
名称。否则,有关原因的更详细信息,请检查伴随的ISAM错误代码。可能是磁盘空间
不足或存在文件权限的问题。
-331 不能取消数据库目录。
在数据库服务器执行DROP DATABASE语句时,从<数据库名>;.dbs删除所有与数据库相关
的文件并试图删除目录本身,因而发生错误。有关原因的更详细信息,请检查伴随的
ISAM错误代码。最有可能的原因是你或其它用户在同一目录中建立了非数据库文件。
而目录不能被删除,因为它还不是空的。
-332 不能访问审计追踪名的信息。
在读审计追踪文件时发生错误。重新执行最后的语句,如果还发生错误,审计追踪文
件有错误。在这种情况下,将需要取消并重新启动审计追踪。
-333 审计追踪文件已经存在,有不同的名称。
在启动新的审计追踪之前,必须取消已存在的审计追踪。使用DROP AUDIT语句。
-334 不能建立审计追踪。
某些问题防止数据库服务器初始化审计追踪文件。检查为文件指定完整的、正确的路
径名。查看操作系统错误信息,它可能给出较多的信息。常见的问题包括缺少磁盘
空间和文件的权限问题。
-335 对指定的表没有审计追踪。
这条语句要求有审计追踪工作,但不存在对该表的当前审计追踪。要么不曾启动,要
么被取消。检查该表是你想要的。如果是在进行恢复工作(语句是RECOVER
TABLE),那么,请检查该表是否从备份的拷贝恢复。如果是,那么在做这个备份时,
该表没有审计追踪。如果审计追踪在后来指定,则在备份和开始审计之间有未知的一
段时间,在此期间可能有未被审计的修改。
-336 不能建立或取消对临时表<表名>;的审计。
临时表不能被审计。关于审计追踪的命令将不接收临时表的这个表名。如果目的不是
命名临时表,检查显示的表<表名>;的拼写。关于显示数据库中所有永久表名的办法,
见错误编号 -313的讨论。
-337 试图在临时表<表名>;上建立视图。
视图只能建立在永久性的表上。在最新的语句中定义视图的SELECT语句中有临时表,
表名。如果你本来不想命名一个临时表,请查看表名的拼法。请参看-313号错误的讨
论,那里给出了显示数据库中全部永久表名的方法。
-338 不能删除审计追踪。
在执行DROP AUDIT命令时,发生了未预料到的错误。为得到更详细的信息,请查看伴
随的ISAM错误代码。
-339 审计追踪文件的名字必须以全路径名的形式给出。
CREATE AUDIT语句中指定的审计追踪文件必须指定全路径。因为审计追踪文件不必放
在特定的目录中,数据库服务器无法用当前路径或DBPATH 变量去寻找它。
-340 不能打开审计追踪文件。
数据库服务器需要为此表而使用审计追踪文件,但是某种意外的错误阻止了它。硬件
错误、文件权限问题、不小心删除了审计追踪文件都可能导致该错误。请查看操作系
统错误信息,它可能会提供更多的信息。
-341 不能从审计追踪文件中读一行。
在数据库服务器读取此表的审计追踪文件时,遇到了意外的错误。错误的原因可能是
文件权限问题、硬件错误。请查阅操作系统信息,以获得更多的信息。
-342 远程主机不能执行此语句。
本语句被送到别的系统上的数据库服务器上执行,但数据库服务器不支持所请求的函
数。也许是早期版本的原因。
-343 审计追踪中的行被加到了不同于期望的位置上。
当数据库服务器按审计追踪中重新构造表时,发现被插入的行现在的位置与审计追踪
中记录的该行第一次插入时的位置不同。要么审计追踪已经损坏;要么审计追踪不完
全,即丢失了一部分修改记录。表不能按审计追踪恢复。在确认已经使表完全地恢复
到审计追踪建立时的状态之后,再重新操作一次。如果错误再次发生,请按其它方式
重建表。
-344 不能删除行-表中的行与审计追踪中的行不匹配。
当数据库服务器按审计追踪重新构造表时,发现被删除的行现在的位置与审计追踪中
记录的该行第一次删除时的位置不同。要么审计追踪已经损坏;要么审计追踪不完
全,即丢失了一部分修改记录。表不能按审计追踪恢复。在确认已经使表完全恢复到
审计追踪建立时的同样状态之后,重新操作一次。如果错误再次发生,请按其它方式
重建表。
-345 不能变更记录-表中的记录与审计追踪中的记录不匹配。
当数据库服务器按审计追踪重新构造表时,发现更新后的的行现在的内容与审计追踪
中首次进行更新时记录的内容不同。或者审计追踪已经损坏;或者审计追踪不完全,
即丢失了一部分修改记录。表不能按审计追踪恢复。在确认表已经精确地恢复到它在
建立审计追踪时的状态之后,重新操作一次。如果错误再次发生,请用其它方式重建
表。
-346 不能修改表中的一行。
在数据库服务器处理UPDATE时,收到一个非期待的错误,为得到引起该错误原因的更
详细的信息,请查看伴随的ISAM错误代码。原因可能是硬件错误或者锁冲突。
-347 不能按排他存取方式打开表。
数据库服务器不能完成LOCK TABLE命令,或者隐含的LOCK TABLE作为其他命令(例如
ALTER TABLE,RENAME, CREATE INDEX这类改变表定义的语句)的一部分被执行。为得
到引起该错误原因的更详细的信息,请查看伴随的ISAM错误代码。可能的原因包括锁
冲突、锁表已满,或低层的主机操作系统的锁机制有问题。
-348 不能从表中读一行。
数据库服务器试图从表中取一行时,接到了一个意想不到的错误。为得到引起该错误
原因的更详细的信息,请查看伴随的ISAM错误代码。原因可能是硬件错或者锁冲突。
-349 未选择数据库。
因为没有当前的数据库,所以此语句不能执行。或许当前数据库没有建立,或许当前
数据库被CLOSE DATABASE语句关闭了。你可以执行DATABASE或者CREATE
DATABASE命令建立当前的数据库。
-350 该字段的索引已存在。
由于在同一字段或同一字段组合上已存在索引,所以CREATE INDEX不能执行。任意字
段组合最多可以有两个索引,一个为升序索引,一个为降序索引。可以通过联结
sysindexes和systables产生的特殊表来显示索引。在下述语句中给出表名即可:
SELECT * FROM sysindexes,systables
WHERE sysindexes.tabid =systables.tabid
AND systables.tabname =`table-name'
sysindexes 表不是普通的表(part字段是重复的组),所以没有简单的SELECT
语句可以返回索引的所有字段名。
-351 数据库中有属于其它用户的表。
DROP DATABASE/UPDATE STATISTICS语句不能运行,可能是由于以下的原因:可能
会破坏其它用户的数据。为了取消此数据库,先要取消全部属于其它用户的表。做此
事时你必须有DBA的权限。请参看-313号错误的讨论,那里给出了显示全部表和它们
的拥有者的方法。
-352 字段<字段名>;没有找到。
CREATE INDEX语句中命名的字段或其中之一不存在。重新查看语句中所有字段的拼
法。请参看-328号错误的讨论,那里有列出表的所有字段名的方法。
-353 在赋予或撤消权限时,没有指定表或视图。
此语句指定表级别的权限(ALTER, DELETE,INDEX, INSERT, SELECT, UPDATE和 ALL)
中的一个;但没有指定权限所作用的表。在赋予或撤消数据库级别的权限(CONNECT,
DBA,RESOURCE)时,你可以不命名表名。但在赋予或撤消表级别的权限时,你必须
指定表。
-354 数据库名或游标名的格式不正确。
此语句中含有不正确的数据库名或游标名格式。如果语句是程序的一部分,数据库名
可能已被传到一个主机的变量中。在OnLine中数据库名应该不多于18个字符,在
INFORMIX-SE中数据库名不多于10个字符(在某些操作系统中可能更少)。游标名必须
不超过18个字符。
数据库名和游标名必须以字母开始,包含字母、数字、下划线字符。6.0及以后版本数
据库名和游标名可以以下划线字符开始。
在DOS系统中,文件名最多只能是8个字符加3个字符的扩展名。
-355 不能重新命名表的文件名。
RENAME语句不能完成,因为数据库服务器得到一个非期待的错误。为得到该错误的
更详细的信息,请查看伴随的ISAM错误代码。可能的原因包括硬件错误和文件权限
问题。
-356 引用和被引用的字段的数据类型不匹配。
子约束中的字段的数据类型必须与父约束中的字段数据类型相同。
-357 视图<视图名>;所依赖的表已被变更。
自从视图定义以来,视图所依赖的表的数据已被变更。此变更删除或者重新命名了视
图中用到的一个字段。视图不能再使用了。取消视图,按现在的模式重新定义视图。
-358 在对数据库执行CREATE、START或ROLLFORWARD操作之前必须关闭当前的
数据库。
此类语句要选择新的当前数据库。但当前数据库必须首先被关闭。请先用CLOSE
DATABASE关闭数据库。
-359 不能取消当前数据库。
当前打开的数据库不能取消。请先用CLOSE DATABASE语句关闭数据库,然后再取消
它。
-360 不能修改用于子查询中的表或视图。
UPDATE/INSERT语句使用的数据是从与子查询相同 的表中取出的。这种操作是不允许
的,因为它将导致无穷循环的危险。你可以先把输入数据选择到个临时表,然后再用
UPDATE/INSERT语句引用此临时表。
-361 字段太长。
这个内部错误反映了数据库服务器和应用程序之间通讯方面的问题。不应看到此错
误。如果此类错误再次发生,请记录下全部环境并与INFORMIX技术支持部联系。
-362 只能有一个SERIAL型字段。
表中最多可以有一个SERIAL型字段。该CREATE TABLE语句指定了两个或两个以上的
SERIAL型字段。重新检查语句,删除多余的的SERIAL型字段。如果你想在表中有一个
外码字段(即引用其它表中的SERIAL型字段),那么在本表中应使用INTEGER
数据类型字段。
-363 CURSOR不在SELECT语句中。
此语句(也许是OPEN语句)中的游标被联系到一个非SELECT语句的预备语句。重新查
看程序的逻辑,特别是游标定义的DECLARE语句、所指定的语句id、建立语句的
PREPARE。如果想在INSERT中使用游标,那么只能把INSERT写为DECLARE语句的一
部分。如果要执行一些SQL语句,可直接用EXECUTE语句而不要使用间接的游标方式。
当你试图将游标联系到一个SELECTINTO TEMP语句时,也会返回这个错误。由于
INTO TEMP子句的存在,SELECT语句不能返回任何记录,因此不能使用游标。
-364 没有说明UPDATE OF的字段<字段名>;。
UPDATE...WHERE CURRENT OF <游标名>;语句至少引用了一个字段:它未出现在定义游
标的DECLARE语句的FOR UPDATE OF子句中。将某些字段列在游标声明中,数据库服
务器将不允许其它字段被修改。重新查看此游标的定义和使用。也许消息提到的字段
和其它的字段应该加到定义中;或者应该删除OF子句,从而允许游标删除表中任意
字段。
-365 FOR UPDATE子句中的游标仅可用在简单SELECT中。
此语句(也许是OPEN语句)中命名的游标在FOR UPDATE子句中定义。然而,它所联系
的SELECT语句或者联结了两个以上的表的联合;用到了UNIQUE, DISTINCT,
ORDER BY, GROUP BY或 UNION;或者选择了一个计算值。此类选择语句不能用于更
新,因无法把新数据分配回多个表中。重新查看游标定义,如果它被定义为FOR <语
句id>;,还要重新查看建立该语句的PREPARE语句。也许需要两个游标,一个游标用于
一般查询,另一个用于更新。
-366 小数位数超过了指定的最大精度。
此语句中DECIMAL/ MONEY数据类型的精度或小数位数有问题。重新查看这些类型的用
法。首先,DECIMAL应该定义为DECIMAL(p)或DECIMAL(p,s)。此处的p代表1到32之间的
精度(数字的总共位数),s代表小数位数(数字小数点右边的数字个数),并且S不
大于P。MONEY型遵循同样规则。
-367 不能计算字符型字段的总和或平均值。
此语句用 SUM /AVG函数对字符型字段(即CHAR或VARCHAR数据类型)进行计算。
如果你不想计算字符型字段的总和或平均值 ,请重新检查表定义时字段名的拼法。
如果字符型字段中存的是字符形式的数值,有个方法可以巧妙地实现数据库服务器
(4.0及以后版本)的自动转换。在表达式中用圆括号的表达式 (<字段名>;+0)
代替函数中的字段名。
-368 不兼容的sqlexec模块。
数据库服务器版本与数据库应用程序例行函数库版本不匹配。这个不兼容性在应用程
序能够执行之前必须解决。数据库服务器通过SQLEXEC环境变量被选中(专指6.0以前
版本的数据库服务器),此变量含有数据库服务器代码的全路径,它常用的名字是
sqlexec或sqlturbo(专指6.0以前的数据库服务器版本)。连接到程序中的存取例行
程序是在编译时选择的。如果你正在执行的程序是由Informix提供的,那么可能是此
Informix产品或其它Informix产品安装不正确。
-369 非法的序列号。请参阅你的安装指南。
在安装你的INFORMIX产品时产生一些错误。请查看SQLEXEC环境变量的值(对6.0之前
的数据库服务器版本而言)和 INFORMIXDIR环境变量,然后向软件安装人员咨询并请
重新查看安装指南。
-370 不能删除最后一个字段。
ALTER TABLE DROP语句要删除表中的每个字段。至少要留一个字段。改正语句,至少
保留一个字段。如果你不想要整个表,可用DROP TABLE语句删除该表。
-371 不能在含有重复值的字段上创建唯一索引。
CREATE UNIQUE INDEX语句不能完成,因为此字段(或一些字段)有一条以上重复的
行。你可以建一个普通索引以接受重复值,或者删除掉重复的值。要得到一列字段中
的重复值,可先建立一个普通索引,在下述SELECT语句中填入表名和字段名,然后执
行之:
SELECT column FROM table main WHERE 1 <
( SELECT COUNT(*) FROM table sub
WHERE main.column = sub.column )
这种语句可扩展到使用了AND的多个字段的情况。
-372 不能变更打开了审计追踪的表。
一旦某表的审计追踪被启动,表就不应变更。如果必需变更,请执行下述操作:把表
复制到备份介质上,用DROP AUDIT去掉审计追踪,删除审计追踪文件,变更表,再把
表复制到备份介质上的,最后用CREATE AUDIT启动新的审计追踪。如果表变更失败(
如果表太大,那么操作过程将长,需要大量的磁盘操作),就要把第一次复制的表恢
复回去。第二次复制的表也是必要的,因为如果变更后的表必须恢复时,那么新的审
计追踪应该被使用有相同的字段格局的备份。
-373 DBPATH太长。
在使用 DBPATH 环境变量定位数据库时,数据库服务器构造的全路径串超出了80个字
符的限制。此限制为完整的数据库目录路径名(即从斜线或者反斜线起到.dbs止)
的长度的限制。为了能使用数据库,你可能要把它定位在较高层的目录上。(此信息
易引起误会,对 DBPATH内容的总长度没有特别限制。)
-374 在带UNION的ORDER BY子句中只能使用字段号。
此查询语句包含UNION和ORDER BY子句。在一个有几个选择语句、而且每个语句中的被
选字段的名字不必要相同的"并"查询语句中,不能在ORDER BY子句中使用字段名。但
可以用位置号表示,即用1表示第一个字段、2表示第二个字段等等。请重写此查询,
在ORDER BY 子句中只使用数字。
-375 不能生成事务的日志文件。
当数据库企图利用执行START命令创建事务日志时,遇到了一个非期待的错误。请查看
伴随的ISAM错误代码,它将提供更详细的信息。典型的原因为磁盘空间不够,文件权
限问题,可同时打开文件的个数的限制。
-376 日志文件已存在。
你在WITH LOG IN 子句中定义的事务日志文件必须是尚不存在的。数据库服务器必须
使用新的日志文件。没有办法在旧的日志文件的后面添加日志数据。已存在的日志文
件中的恢复数据是至关重要的,所以不能简单清空已存在的日志文件。要作一完全备
份:先锁定数据库,把数据库的目录复制到备份介质上,删除日志文件(这个文件已
不再需要了),执行START DATABASE语句。要进行部分归档,先对数据库加锁,把日
志文件复制到备份介质上并以全归档的方式存储复制的日志文件,删除/重命名日志文
件,执行START DATABASE 语句。
-377 在关闭数据库之前必须结束事务。
只有在当前事务完成后,该语句(DATABASE,CREATE DATABASE或CLOSE
DATABASE)才能执行。你可以使用COMMIT WORK语句,也可以用ROLLBACK
WORK语句,然后就可以关闭数据库了。
-378 当前记录被其它用户锁住。
此语句需要的表中的一行不能被访问,因为此行已被锁住。为得到更多的信息,请查
看伴随的ISAM错误号。可能的错误码为-107, -113, -134, -143, -144, -154,它们
分别表示你的程序和其它用户程序之间些微不同的关系。可用SET LOCK MODE TO WAIT
来阻止大部分(但不是全部)此类错误的发生。
在4.1之版本前的数据库服务器中,这类错误只是由UPDATE 和 DELETE WHERE
CURRENT OF语句引起的在6.0版本中,这条错误信息不再被使用。
-379 不能撤消字段上的权限。
在GRANT语句中,可以对特定的字段授与UPDATE或SELECT权。然而,REVOKE权限语句只
能接受权限类型的关键字,你不能撤消对指定字段的访问权限。如果要改变某个用户
所允许访问的字段,那就必须先撤消全部权限,再按新的字段列表予以授权。
-380 不能删除日志文件。
数据库服务器在初始化事务的日志时,接收到一个非期待的错误。请查看伴随的ISAM
错误代码,它将给出关于原因的详细说明。典型的原因是硬件错误和文件权限错误。
-381 不能将权限授给那些将该种权限赋予你的用户。
你试图将原先以WITH GRANT OPTION授与你的权限授予别人。原来授予你该权限的用户
的名字也列在当前命令的用户名单之中。为了系统安全起见,不允许相互授权。重写
语句,去掉那些授权给你的用户的名字。要查看你不该授权的用户名单,请按下列方
式查询systabauth:
SELECT grantor FROM systabauth WHERE grantee = USER
-382 在视图和选择子句中指定的字段个数必须相等。
在此VIEW语句中,你已经列出了视图的字段名。然而,此处列出的字段数与定义视图
的SELECT语句中的字段数不等。检查两个列表中的标点,确认你为选择列表中的每项
都提供了名字。
-383 聚合或表达式中的视图字段必须显式地命名。
在该VIEW语句中你没有为字段列出特定的名称。只有当SELECT语句只选择简单的、命
名的字段时,这种操作才是允许的。然而,此处的SELECT语句选择了一个或者多个表
达式。你必须在视图名后的括号中列出字段的名字。因为不能只给出一部分字段名,
你必须列出全部字段名。
-384 不能修改非简单视图。
此语句试图修改(插入、删除、修改)一视图中的某些字段。然而,此视图不可被修
改。此视图是基于联结两个或者更多的表的SELECT语句的,或者是用来选择计算值、
文字值的SELECT语句的。(但你可以对从单个表中选出的视图进行DELETE
操作,即使有一些计算值被选出也是允许的。)你必须使此语句直接对视图所基于的
表进行操作。
-385 数据值越界。
此语句企图向一个用WITH CHECK OPTION定义的视图中送数据。因此新的数据必须满
足视图中WHERE子句的检查条件。然而,在当前语句中有一个或者多个数据值不满足
条件。所以此变更操作不能执行。事物被滚回。要查看新数据必须满足的条件,可用
下列语句显示视图的定义:
SELECT seqno, viewtext FROM sysviews, systables
WHERE systables.tabname = 'viewname' AND
systables.tabid = sysviews.tabid ORDER BY seqno
-386 字段中包含空值。ALTER TABLE 语句中包含的MODIFY字句将NOT NULL属性赋
予一个已经存在的字段。但此字段已包含了一个或者多个null值。除非将所有的null
值删除或者将其更新为非null值,否则此修改无法完成。
-387 没有连接权限。
不能访问这条语句所要求的数据库,因为没有被获准与该数据库连接的权限。
请与拥有该数据库管理员权限的人联系,并向他申请与该数据库连接的权限。
-388 没有资源权限。
如果有CREATE TABLE, CREATE INDEX,或CREATE PROCEDURE语句,这些语句
不能被执行,因为你的帐户没有被授予此数据库的RESOURCE权限。你需要RESOURCE
权限去创建永久性的表和永久性表的索引和过程。
如果有SET语句,START VIOLATIONS TABLE语句,或STOP VIOLATIONS TABLE
语句,这些语句不能被执行,因为你的帐户没有被授予此数据库的RESOURCE权限。你
需要RESOURCE权限在当前数据库中对一限制的、触发的或定义了索引的表去执行SET
语句。在当前数据库中对一基表执行START VIOLATIONS TABLE或STOP VIOLATIONS
TABLE语句也需要RESOURCE权限。
为解决此错误,请与有此数据库的DBA权限的人联系,并请他授给你该数据库的
RESOURCE权限。
-389 没有DBA权限。
此语句不能被执行。因为你的帐户没有被授予此数据库的DBA的权限。请与有此数据库
DBA权限的人联系,并请他授权给你(或者请他帮你执行此语句)。
-390 此同义名已作为表名或同义名使用过。
CREATE SYNONYM语句命名了一个已在使用的同义名。为查看当前定义的同义名和表
名,请按如下方式查询systables:
SELECT tabname, owner FROM systables WHERE tabid >;99
-391 不能向字段<字段名>;中插入null。
此语句试图向所指出的字段中送入NULL值。但此字段被定义为NOT NULL。当前事务被
滚回。如果这是一段程序,请重新检查表的定义并修改程序的逻辑使null不被用于不
接受NULL的字段。
-392 系统错误- -遇到非期望的NULL指针。
这是一个不应发生的内部错误。如果此类错误再次发生,请记录下全部环境并与
INFORMIX技术支持部联系。
-393 where子句中的条件导致双向外部联结。
此查询需要一个外部联结。但是在WHERE子句有一个或更多的条件使主—从关系发生冲
突。请重新察看查询,确认关联两个表的每个条件都是必要的。
-394 没有找到视图<视图名>;。
所命名的视图不存在,故不能删除之。可用如下语句查询systables中现存的视图的名
字:
SELECT tabname FROM systables WHERE tabtype = `V'
-395 WHERE子句包含一个外部笛卡尔乘积。
此查询需要一个外部联结。但是WHERE子句的写法实际是要对于主表的每一行分别选出
从属表的每一行,这将导致一个规模非常大的输出。请重新察看查询语句,并检查在
查询语句中至少有一个条件使每一对主—从表之间有关联。
-396 在嵌套的外部表与保留表之间存在不合法的联结。
此查询需要一个外部联结。但是WHERE子句中的一个条件使一个嵌套的从属表与一个不
是它的直接父表的保留表之间发生关联。这种操作是不被支持的。请重新察看此查
询,确认每个条件中相关联的两个表分别是保留表与它的直接从属表。
-397 系统目录 <表名>; 损坏。
这个内部错误不该出现。该数据库服务器在一个或多个系统目录表中遇到一些破坏完
整性约束的内容。运行 tbcheck 或 oncheck实用工具 (对于 OnLine) 或者bcheck 或
secheck实用工具 (对于 INFORMIX-SE)。如果该错误再次出现,请记下全部细节并
与Informix技术支持部联系。
-398 游标控制必须在一个事务内部。
试图使用一个UPDATE 或一个DELETE WHERE CURRENT OF语句时会产生这个错误信息。
这个语句将通过一个游标修改一个表。然而,这个数据库使用一个事务日志。对这种
情况,通过一个游标进行修改必须处于一个事务的范围。
检查程序逻辑,并检查在这个语句之前先执行BEGIN WORK 语句而且在适当的时间结束
该事务。如果程序既要通过使用事务的数据库,又要通过不使用事务的数据库来工
作,你可以让它检测 SQL 通讯区的sqlwarn 数组的第二个元素。如果该数据库有一
个事务日志,该通讯区就包含一个跟随DATABASE语句的字母W;如果没有事务日志,
就包含一个空格。
-399 不能存取日志文件。
这个查询参考一个命名为syslog 的表。systables目录有一行在 tabname字段中具有
syslog,但这只是一个存储事务日志文件路径名的方便地方。在INFORMIX-SE下一个命
名为syslog的表不能存于登录的一个数据库中。(一般地,不宜使用以sys-开始的表
名,而 syslog 是不允许的。)
-400 试图在未打开的游标上进行Fetch。
这个 FETCH 语句命名一个从未打开或已经关闭的游标。检查程序逻辑并检查它将在此
之前打开该游标,而且没有意外地关闭它。除非一个游标用WITH HOLD说明,它自动地
由一个COMMIT WORK 或 ROLLBACK WORK语句 关闭。
-401 试图在 NULL 游标上进行Fetch。
这个 FETCH 语句传递一个无效的游标数据结构或一个 null 指针。该游标可能已经用
FREE语句释放,或者该游标数据结构可能在内存被覆盖。
5.0及以后版本的数据库服务器不返回这个错误代码。参见错误-267 和 -404。
-402 主机变量的地址为 NULL。
检查程序构造 sqlda 和相关数据结构的方法,弄清它被设置为 null 指针的原因。
如果程序是用 INFORMIX-4GL 或其它语言编写的(在这种语言中,sqlda 不是由程序
直接构造的),或者如果该语句只是通过名称来引用宿主变量,这个错误就不应当
产生。如果这个错误产生了,请注意所有的环境状况,并与 Informix 技术支持部门
联系。
-403 接收行的大小与期望的大小矛盾。
这个内部错误说明在数据库服务器和调用它的函数库函数之间通讯有问题。检查你的
程序与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并
与 Informix 技术支持部联系。
-404 一个 NULL 控制块已经作为一个参数传递。
检查程序构造 sqlda 和相关的数据结构的方式;检查它是否以某种方法设置一个
null 指针。如果程序是用INFORMIX-4GL语言或在其内没有用程序直接构造 sqlda
的其它语言编写的,或者如果这个语句只用名字参考了主机变量,这个错误就不应该
出现。请与Informix 技术支持部联系。
在4.1版及更早版本的数据库服务器按所指明的意义上返回这个错误信息。对于5.0版
之后的数据库服务器版本,参见下一个条目。
-404 无游标或语句可供使用。
这个语句为一个游标命名,而此游标已与FREE语句同时发布。重新检视此程序的逻
辑,并检查在到达这个语句之前,所指定的游标是有所说明,打开的,但没有释放。
当使用5.0版本及其後版本时,这出错码的意义如上。对於较老的数据库服务器,参见
上一个说明。
-405 一个主机变量的地址不是严格地匹配的。
检查该程序构造 sqlda 和相关的数据结构的方式;检查它是否以某种方法设置一个不
是字匹配的指针。确认全部主机变量在它们的类型的合适的地址范围。如果程序是用
INFORMIX-4GL 语言或另一种程序员不能在其内控制存储调整的语言编写的,那么这个
错误就不应该出现。如果该错误再出现,请记下全部细节并与Informix技术支持部
联系。
-406 内存分配失败。
在当前语句中某些内容要求为数据存储分配内存,但内存不可使用。几件事情可能导
致这个错误,包括:你的应用有一个内存漏洞;你正在请求比系统允许配置的更多的
资源;或者UNIX系统本身有问题需要重启该系统。
滚回当前事务。设法使这个语句更简单或移动更少的数据。也可以与你的 UNIX 系统
管理员商量解决内存问题或者设法使操作系统给这个程序更多的虚拟内存,以在其内
运行这个程序。在 DOS 系统,退出操作系统命令行,释放一些磁盘空间,并重新
提交你的程序。
-407 从 sqlexec 进程接收到的错误号零。
这个内部错误表示在数据库服务器和调用它的函数库函数之间通讯的问题。检查你的
程序与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并
与 Informix 技术支持部联系。
-408 从 sqlexec 进程接收到无效的消息类型。
这个内部错误表示在数据库服务器和调用它的函数库函数之间通讯的问题。检查你的
程序与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并
与 Informix 技术支持部联系。
-409 当前用户没有发现或不能执行 Sqlexec。
在启动应用程序时,应用程序与数据库服务器进程相联系。该操作使用SQLEXEC
环境变量中的值就做到这一点(对于数据库服务器6.0以前的版本);它应该指向两个可
执行文件之一:INFORMIX-SE 的 sqlexec 或 INFORMIX-OnLine 的sqlturbo
(6.0以前的版本)。通常这些将驻留在由 INFORMIXDIR 环境变量命名的目录的
lib 子目录中。检查你的SQLEXEC 环境变量是否确实正确地设置以及你的帐户是否已
经存取到这些目录和文件。
-410 准备语句失败或没执行。
这个 EXECUTE 语句参考一个尚未准备的语句 id。或者没有执行 PREPARE 语句,或者
虽然执行却返回一个错误代码。检查程序逻辑,确保语句是准备好的且 PREPARE
的返回代码被检测。一个从PREPARE 返回的负的错误码通常反映一个已准备的语句中
的错误。
-411 不能同时指定主机变量和描述符。
这个语句有一个USING DEs criptOR 子句,但它还参考一个用主机变量说明的游标(即
用 SELECT...INTO 或 INSERT ,它们使用 VALUES 子句中的变量)。描述符结构和
主机变量名字的目的都是指定数据值的位置,且只能用一种方法。检查该游标的说明
并决定指定数据值位置的一种方法。
-412 命令指针是 NULL。
这个语句(可能是 EXECUTE 或 DECLARE)参考一个从未准备或已经被释放的动态 SQL
语句。检查程序逻辑,确认语句已经准备好,即 PREPARE 没有返回一个错误代码,并
且在此之前没有用 FREE 语句释放该语句。
-413 试图在未打开的游标上插入。
这个 INSERT 语句命名一个从未打开的或者已经被关闭的游标。检查程序逻辑并检查
它将在此之前打开该游标,而且不会意外地关闭它。一个插入游标是自动地由COMMIT
WORK 或 ROLLBACK WORK语句关闭的。
-414 试图在 NULL 游标上插入。
这个 PUT 语句指定一个无效的游标。该游标可能已经用 FREE 语句释放,或者该游标
数据结构可能已在内存中被覆盖。
-415 数据转换错误。
数据库服务器不能进行一个程序变量和一个数据库字段之间的转换。在许多情况中它
执行自动数据转换,但在这种情况中却不行。例如一个字符串只要包含一个有效数的
数字就将被转换成一个数值类型;或者一个浮点或十进制数将被转换成整数,只要接
收器对该值有足够的精度。检查这个语句,检查每个与匹配的数据库字段没有相同数
据类型的程序变量。
-416 打开语句的USING 选项对于插入游标是无效的。
这个 OPEN 语句参考一个为 INSERT 语句说明的游标。OPEN 的USING 子句在这种情况
是不合适的;它只能用于指定一个SELECT 语句使用的变量。检查程序以确认在这个语
句中是否使用了正确的游标。如果在这个语句使用的游标是正确的,并且如果
INSERT 语句是 DECLARE 语句的部分,你可以在其中直接命名宿主变量。如果
INSERT 语句已经准备好,你可以在PUT 语句的 FROM 子句中指定宿主变量。
-417 FLUSH 只能被用于一个插入游标。
这个 FLUSH 语句参考一个与 SELECT 语句而不是 INSERT 语句结合在一起的游标。
FLUSH 只适合插入游标。检查程序,确认命名了正确的游标。
-418 遇到NULL SQLDA 描述符或主机变量列表。
检查程序构造 sqlda 及相关的数据结构的方式;检查它设置一个 null 指针的原
因。如果程序是用 INFORMIX-4GL 语言或另一个在其内没有用程序直接构造sqlda
的语言编写的,或者,如果这个语句只用名字引用了主机变量,则这个错误不应该出
现。如果该错误再出现,请记下全部细节并与 Informix 技术支持部联系。
-419 在 SQLDA 或宿主变量中的 SQLDATA 指针是 null。
检查程序构造 sqlda 及相关的数据结构的方式;检查它设置一个 null 指针的原
因。如果程序是用 INFORMIX-4GL 语言或另一个在其内没有用程序直接构造sqlda
的语言编写的,或者,如果这个语句只用名字引用了宿主变量,则这个错误不应该出
现。如果该错误再出现,请记下全部细节并与 Informix 技术支持部联系。
-420 不能执行远程 sqlexec。
应用程序正在启动并试图与另一个计算机中的数据库服务器进程连通。为此,它使用
了 SQLHOST 环境变量的内容。检查SQLHOST变量并修改在其它机器中已经启动的
INFORMIX-NET 或 INFORMIX-STAR 服务。
-421 执行远程 sqlexec 的未知服务。
应用程序正在启动并试图与其它机器中的一个数据库服务器连通。它使用来自服务入
口 sql 下的文件 /etc/services的信息,但没有发现该文件。请与在系统上安装
INFORMIX-NET 的人联系。
-422 试图在未打开的游标上刷新。
这个 FLUSH 语句命名一个从未打开的游标,或已经被关闭的游标。检查程序逻辑并确
保它将在此之前打开该游标,而且不会意外地关闭它。一个插入的游标是自动地由
COMMIT WORK 或 ROLLBACK WORK关闭的。
-423 试图在无当前行时执行 FETCH CURRENT。
这个 FETCH 语句请求当前行,但当前行不存在。或者游标刚被打开,或者先前的
fetch返回一个错误代码,也许由于它处在数据的结尾而产生这种情况。在试图使用这
个语句前,检查程序逻辑,并检查使用一个FETCH NEXT语句或其它FETCH
操作以建立一个当前行。
-424 游标已经从这个准备好的语句说明了。
这个 DECLARE 语句把一个游标与一个准备好的语句名结合在一起。然而,另一个
DECLARE 语句已经被执行,并把另外一个游标与相同的语句 id 结合在一起。这种操
作是不被支持的;一个已知语句只能被一个游标结合。检查程序中的全部
DECLARE 语句并确认它们全部参考唯一的语句。本错误信息在5.0及以后的版本中不应
再出现。
-425 当前数据库是由其它用户打开的。
其它用户以排它的方式打开了要求的数据库。在暂停后或当已知的数据库闲置时,再
重复该语句。
-426 提供了未知的值。
这个内部错误不该出现。如果该错误再出现,请记下全部细节并与 Informix
技术支持部联系。
-427 连接用一个不同的 count 调用的 count例程。
这个内部错误不该出现。如果不能找到直接的原因,请记下全部细节并与 Informix
技术支持部联系。
-428 连接例程调用的次数太多。
这个内部错误不该出现。如果不能找到直接的原因,请记下全部细节并与 Informix
技术支持部联系。
-429 指示变量应该是两位字节的整数。
这个语句把一个宿主变量命名为一个指示变量,该宿主变量未被说明为一个小的整
型。返回到一个指示变量的值是一个小的整型值。检查该语句,尤其是作为指示变量
的主机变量的使用。确认指示变量的名字拼写正确且它们的说明是合适的。如果在
一个4GL程序中,该错误应该出现。如果这个错误再出现,请记下全部细节并与
Informix 技术支持部联系。
-430 类型 integer 不匹配大小。
这个内部错误指出在数据库服务器和调用它的库函数之间通讯的问题。检查你的程序
与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并与
Informix 技术支持部联系。
-431 类型 float 不匹配大小。
这个内部错误指出在数据库服务器和调用它的库函数之间通讯的问题。检查你的程序
与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并与
Informix 技术支持部联系。
-432 类型 date 不匹配大小。
这个内部错误指出在数据库服务器和调用它的库函数之间通讯的问题。检查你的程序
与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并与
Informix技术支持部门联系。
-433 类型 money 不匹配大小。
这个内部错误指出在数据库服务器和调用它的库函数之间通讯的问题。检查你的程序
与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并与
Informix 技术支持部门联系。
-434 类型 decimal 不匹配大小。
这个内部错误指出在数据库服务器和调用它的函数库函数之间通讯的问题。检查你的
程序与使用的数据库服务器有相同的软件级。如果该错误再出现,请记下全部细节并
与 Informix 技术支持部门联系。
-435 Time-out 值必须大于等于-1。
在 INFORMIX-ESQL/C 或 ESQL/COBOL中,你为你的回调 函数/例程提供一个非法的
time-out 值。请检查 time-out 值大于等于-1。
-436 当 time-out 值大于等于零时,回调函数必须被定义。
你没有对你的 time-out 值提供一个回调函数。确认你既提供了 time-out 值也提供
了一个回调函数。
-437 连接必须建立在登记回调函数之前。
在连接到一个数据库服务器之前 |
|