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 の値にしたい場合は、そのタイプを整数に設定する必要があります。文字列である必要がある場合は、''または'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 に答える