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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-21 00:02:47

作者:oldbank  出处:
-651        保留的字段大小>最大字段大小(varchar)。

这个语句指定了一个VARCHAR(m, r)带有一个大于最大宽度m的保留宽度r。检查字段定
义的标点。如果它是所要的,修改那个语句使得m >= r。

-652        局部变量不允许缺省值。

试图用一个缺省值定义一个局部变量。只有全局变量和参数能有缺省值。

下面是一个错误的例子:

DEFINE var INT DEFAULT 10; -- 错误

更正如下:

DEFINE var INT; LET var = 10;

-653        声明为LIKE的变量不能是全局的。

一个全局变量定义为LIKE。LIKE变量必须是局部变量。

下面是一个错误的例子:

DEFINE GLOBAL var LIKE tab.col; -- 错误

更正:不要对全局变量使用LIKE关键字。换句话说,显式地指定数据类型。

-654        错误使用PROCEDURE声明类型。

过程声明用在参数或RETURNING子句中。存储过程不能接受或返回过程。

下面是一个错误的例子:

CREATE PROCEDURE testproc (proc1 procedure) -- 错误 RETURNING 
        procedure; -- 错误
        ...
        END PROCEDURE

更正:不要试图在一个参数或RETURNING子句中使用过程说明。

-655        RETURN值计数与过程说明不匹配。

一个过程在RETURNING子句中声明的返回值的个数与在一个RETURN子句中的值的个数
不匹配。

下面是一个错误的例子:

CREATE PROCEDURE testproc () RETURNING INT, INT;
        ...
        RETURN 1,2,3; -- 错误
        ...
        RETURN 1; -- error END PROCEDURE

更正:在这个实例中,严格地返回两个参数。

-656        过程没有说明为有返回值。

当过程说明时,它没有包含一个RETURNING子句指定这个过程将有任何返回值,但随后
一个RETURN语句在过程体中被发现。

下面是一个错误的例子:

CREATE PROCEDURE testproc() DEFINE a INT; LET a = 10; RETURN a + 1; --
        错误 END PROCEDURE

更正:在DEFINE前增加一个RETURNING子句或移去RETURN语句。

-657        不能在过程内建立过程。

不能在一个CREATE PROCEDURE语句中有CREATE PROCEDURE语句。

-658        说明成GLOBAL的变量要求一个缺省值。

一个全局变量没有给缺省值。全局变量要求一个缺省值。

错误的例子:

DEFINE GLOBAL glob INT; -- 错误。

更正:

DEFINE GLOBAL glob INT DEFAULT 10;

-659        SELECT语句要求INTO TEMP表。

一个SELECT语句没有指定在哪里放返回值。一个过程中的SELECT语句要求一个INTO
TEMP子句或一个引用适当过程变量的INTO子句。

错误的例子:

CREATE PROCEDURE testproc()
        ...
        SELECT col1, col2 FROM tab; -- 错误END PROCEDURE

更正:

CREATE PROCEDURE testproc()
        ...
        SELECT col1, col2 INTO var1, var2 FROM tab; SELECT col1, col2
        FROM tab INTO TEMP another_table; END PROCEDURE

-660        循环变量<变量名>不能被修改。

试图修改一个FOR 语句中的循环变量。循环变量不能在循环内部被修改。

错误的例子:

FOR i IN (1,2,3,4) LET i = i + 1; -- 错误END FOR

更正:在LET语句中使用另一个变量。

-661        变量数和返回值数不匹配。

一个LET语句左边的变量的个数和右边的值数不匹配。

错误的例子:

LET a,b = 10,20,39; LET i,j = proc1()+proc2(); LET a,b = (SELECT c1
FROM tab)

更正:匹配LET语句两边表达式的个数。

-662        指定的循环变量<变量名>超过一个。

在一个FOREACH语句中使用一个循环变量超过一次。

错误的例子:

FOREACH SELECT col1, col2 INTO var, var FROM tab -- 错误
        ...
        END FOREACH

更正:

FOREACH SELECT col1, col2 INTO var1, var2 FROM tab
        ...
        END FOREACH

-663        对过程<过程名>使用了多于一次的过程调用句法。

调用一个过程时,一些参数命名了而其它的没命名。

错误的例子:

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

更正:

LET var = proc (arg1 = 10, arg2 = 20, arg3 = 30); --正确LET var =
proc (10,20,30);--正确

-664        系统函数<函数名>的参数个数错误。

对一个函数指定了一个非法的参数个数。检查对函数传递了正确的参数个数。

-665        语意上的内部错误-<代码号>。

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

-666        变量<变量名>必须被说明为INTEGER或SMALLINT。

在一个FOR语句中,包含范围的循环变量必须被说明为INT或SMALLINT。

错误的例子:

DEFINE var CHAR(10);         FOR var IN (e1, e2 TO e3, e4) -- 错误
        ...
        END FOR;

更正:因为FOR语句包含一个范围操作符(TO子句),"var"必须被说明为INT或
SMALLINT。

-667        变量<变量名>没有被说明。

指定的变量没有说明。检查未定义变量的拼写以确定其不导致错误。

-668        系统命令不能被执行。

一个系统调用在操作系统中失败。下面的语句显示一个可能导致一个错误的例子。
SYSTEM `hello';

-669        变量<变量名>重复说明。

一个变量在同一个作用域中被说明两次。参照Informix Guide to SQL: -Tutorial,
第12章,过程变量的作用域的一个解释。

-670        变量<变量名>说明为SERIAL类型。

SERIAL类型不是一个合法的过程类型。使用整数类型去匹配SQL SERIAL类型。
阅读(527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~