динамический запрос db2 в хранимой процедуре

91
7

Привет, у меня была хранимая процедура, как показано ниже,

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

и если мы используем || вместо + ie,

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

то его ошибка бросания, как показано ниже,

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

пожалуйста, помогите по этому поводу. спасибо в adbance.

спросил(а) 2013-02-12T17:38:00+04:00 7 лет, 8 месяцев назад
1
Решение
94

В 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-12T18:30:00+04:00 7 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема