-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类型。 | | |