0

嗨,我有一个如下的存储过程,

Create  PROCEDURE my_car(
in diesel integer,
out milege integer)
P1: BEGIN

SET START_query = 'SELECT*';
SET FROM_CLAUSE = ' FROM car, diesel';
SET WHERE_CLAUSE = ' WHERE car.c1 = diesel.c2';

IF (diesel =0) THEN            
                SET WHERE_CLAUSE = +WHERE_CLAUSE+'AND car.diesel=0' ;
                ELSE
                SET WHERE_CLAUSE = +WHERE_CLAUSE+' AND car.diesel='+diesel ; 
               END IF;
END P1

但它的抛出错误如下。

DB2 SQL Error: SQLCODE=-402, SQLSTATE=42819, SQLERRMC=+, DRIVER=3.52.90

如果我们使用 || 而不是 + 即,

SET WHERE_CLAUSE = WHERE_CLAUSE || 'AND car.diesel=0' ;

然后它的抛出错误如下,

DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=||;FUNCTION, DRIVER=3.52.90

请帮忙。

4

1 回答 1

0

在 DB2 中,||而不是+用于字符串连接。

此外,柴油是一个字符串,您将其与零进行比较。如果您希望柴油为 0 或 1 值,则应将其类型设置为整数。如果它需要是一个字符串,你应该将它与''or'0'或任何有意义的东西进行比较。

我不确定你的意思是什么+V_WHERE_CLAUSE+,但你的代码应该是这样的:

IF (diesel = '0') THEN            
    SET WHERE_CLAUSE = WHERE_CLAUSE || 'AND car.diesel=0';
ELSE
    SET WHERE_CLAUSE = WHERE_CLAUSE || ' AND car.diesel=' || diesel; 
END IF;

或者也许只是这样:

SET WHERE_CLAUSE = WHERE_CLAUSE || ' AND car.diesel=' || diesel; 
于 2013-02-12T15:30:12.963 回答