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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-21 00:02:18

作者:oldbank  出处:
-671        过程调用<过程名>有重复的参数名。

一个过程调用命名同一个参数不止一次。

错误的例子:

LET var = proc (arg1 = 10, arg2 = 20, arg1 = 30);-- 错误

-672        无效的数据结构<执行树>。

如果这个内部错误再次发生,请记录全部的环境并和Informix 
技术支持部联系。

-673        过程<过程名>已经在数据库中存在。

试图建立一个已经在数据库中存在的过程。如果你想建立过程的一个新版本,在试图
建立过程的新版本前使用DROP PORCEDURE语句取消这个过程。

-674        过程<过程名>没找到。

一个被调用的过程在数据库中不存在。如果你准备了一个EXECUTE PROCEDURE语句,然
后过程被你的应用或一个其它的应用在你执行准备的语句前终止,会收到这个错误。

-675        不合法的SQL语句在存储过程中。

在一个过程中运行一个禁止的语句。这个错误发生在一个过程被一个SQL数据管理语句
调用时。

错误的例子:

CREATE PROCEDURE testproc (arg INT, id INT) RETURNING INT; UPDATE tab
        SET col = arg WHERE key = id; -- 错误 RETURN id; END 
        PROCEDURE;

SELECT col FROM tab WHERE testproc(tab.col, tab.key) = 10;

更正:不要使用一个限制的语句(诸如前面的UPDATE语句)。

-676        无效的检查约束字段。

一个在字段级指定的检查约束只能参考那个字段。要指定一个跨越多于一个字段的检
查约束,在表级指定检查约束。不能为字段建立一个穿越表的约束。

-677        检查约束不能包含子查询或过程。

一个检查约束不能有子查询或过程调用。

-678        在检查约束中无效的字段<字段名>下标。

在一个检查约束中一个带下标的字段的下标超出字段的边界。检查字段的最大长度不
要超越带下标的字段指定的边界。如果知道字段的表名,可以使用以下的子查询查询
系统目录表以找出字段的最大长度。

SELECT collength FROM syscolumns WHERE colname = 
        `column-name' 
        AND tabid = 
        (SELECT tabid FROM systables WHERE tabname =
                `table-name')

-679        不能对约束<约束名>读违背约束的数据。

参照ISAM错误以得到更多的信息。如果这个内部错误再次发生,请记录全部的环境并
和Informix 技术支持部联系。

-680        不能对约束<约束名>写违背约束的数据。

参照ISAM错误以得到更多的信息。如果这个内部错误再次发生,请记录全部的环境并
和Informix 技术支持部联系。

-681        在INSERT列表中字段不止一次被指定。

这个错误当用户在INSERT字段列表中指定一个字段名超过一次时发生。

-682        在表<表名>中读取约束索引错误。

系统不能验证约束。参照ISAM错误以得到更多的信息。如果这个内部错误再次发生,
请记录全部的环境并和Informix技术支持部联系。

-683        指定的STEP表达式将不通过RANGE。

在FOR语句中的STEP表达式的计算值将导致一个无穷的循环。

错误的例子:

FOR i = 10 TO 20 STEP -1; -- 错误        ...
END FOR

更正:更正范围或步长表达式以使增加的值在范围之内。

-684        过程<过程名>返回太多的值。

从一个过程返回的值的个数多于调用者期待的值的个数。

错误的例子:

CREATE PROCEDURE testproc (arg INT)
        RETURNING INT, INT;
        RETURN 1,2;
END PROCEDURE
SELECT col FROM tab WHERE col = testproc(1); -- 错误

-685        过程<过程名>返回太少的值。

从一个过程返回的值的个数少于调用者期待的值的个数。

错误的例子:

CREATE PROCEDURE testproc (arg INT)
        RETURNING INT, INT;
        RETURN 1,2;
END PROCEDURE
UPDATE tab SET (c1, c2, c3) = (testproc(1)); -- 错误

-686        过程<过程名>返回超过一行的值。

一个过程在调用者期待只返回一行值的时候,返回了超过一行的值。(例如,它执行
RETURN... WITH RESUME)

错误的例子:

CREATE PROCEDURE testproc (limit INT)
        RETURNING INT;
        DEFINE i INT;
        FOR i IN (1 TO limit)
                RETURN i WITH RESUME;
        END FOR
END PROCEDURE;
CREATE PROCEDURE gettest()
        DEFINE var INT;
        LET var = testproc (10); -- 错误END PROCEDURE

-687        在跟踪存储过程前设置调试文件。

一个TRACE语句(除了TRACE OFF)在一个SET DEBUG FILE语句前执行。不知道TRACE
语句的输出到何处。

错误的例子:

TRACE procedure; -- 错误
更正:
SET DEBUG FILE TO `trace.out';
TRACE procedure;

-688        变量<变量名>必须被说明为CHAR或VARCHAR。

说明了CHAR或VARCHAR数据类型以外的变量。更正说明并重试。

-689        全局变量<变量名>说明不合理。

两个或更多的执行着的过程定义了不同数据类型的同一个全局变量。

错误的例子:

CREATE PROCEDURE test1()
        DEFINE GLOBAL glob INT DEFAULT 10;
        ...
END PROCEDURE
CREATE PROCEDURE test2()
        DEFINE GLOBAL glob CHAR (9) DEFAULT USER;
        ...
END PROCEDURE 

更正:一致地说明全局变量。(使用合适的命名约定将是有用的。)同一数据类型但
不同长度的两个变量被认为是不一致的。

-690        不能从参考表<表名>中读取码。

指示约束不能生效。参照ISAM错误以得到更多的信息。如果使用级连的删除,数据库
日志必须打开。
阅读(604) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~