存储过程中的动态db2查询

时间:2013-02-12 14:38:31

标签: stored-procedures db2 string-concatenation

您好我有一个存储过程如下,

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

请帮忙。 非常感谢。

1 个答案:

答案 0 :(得分:0)

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

此外,柴油是一个字符串,你将它与零进行比较。如果您希望柴油为0或1值,则应将其类型设置为整数。如果它需要是一个字符串,您应该将其与'''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;