Как использовать CASE / WHEN в DB2 с помощью вставки в хранимую процедуру? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть хранимая процедура для DB2, где я хочу заполнить поле с именем SEASON буквой W для зимы и S для лета.Процедура выполнена, но я не могу справиться с логикой.Может кто-нибудь показать мне, как это работает?

Это для таблицы измерений в хранилище данных.

INSERT into ABC.TIME_DIMEMSION ( DATE, SEASON, QUERTER) VALUES( DATE(myDate), CASE WHEN MONTH(myDate) = 1 THEN SET SEASON= 'W'; WHEN MONTH(myDate) = 2 THEN SET SEASON= 'W'; WHEN MONTH(myDate) = 2 THEN SET SEASON= 'S'; ELSE SET SEASON= 'X'; END CASE. QUARTER(loaddate));

Я получаю сообщение об ошибке

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Посмотрите на описание CASE-выражения , которое вы можете использовать в других операторах.

Оно отличается от Case-заявления .

Вы должны использовать CASE expression в вашем случае:

INSERT into ABC.TIME_DIMEMSION (
    DATE,
    SEASON,
    QUERTER)
VALUES(
    DATE(myDate),
    CASE MONTH(myDate)
      WHEN 1 THEN 'X'
      WHEN 2 THEN 'Y'
             ELSE 'Z'
    END,
    QUARTER(loaddate)
);

-- or

INSERT into ABC.TIME_DIMEMSION (
    DATE,
    SEASON,
    QUERTER)
VALUES(
    DATE(current timestamp),
    CASE 
      WHEN MONTH(current timestamp)=1 THEN 'X'
      WHEN MONTH(current timestamp)=2 THEN 'Y'
                                      ELSE 'Z'
    END,
    QUARTER(current timestamp)
);
0 голосов
/ 05 февраля 2019

Один способ сделать это (есть другие способы) в хранимой процедуре:

Примечание: не используйте зарезервированные слова для имен столбцов таблицы!

    declare v_season varchar(10);
    declare v_themonth integer;
    set v_themonth = month(somedate);

    set v_season = case when  v_themonth  in (12,1,2) then 'Winter'
        when v_themonth in (3,4,5) then 'Spring'
        when v_themonth in (6,7,8) then 'Summer'
        when v_themonth in (9,10,11) then 'Autumn'
        end;
    insert into abc.time_dimension( thedate, season) 
    values ( somedate, v_theseason);
...