如何通过在存储过程中使用插入来在DB2中使用CASE / WHEN?

时间:2019-02-05 12:34:14

标签: stored-procedures db2 switch-statement

我有一个用于DB2的存储过程,我想在其中用W表示冬季,S表示夏季,填充一个名为SEASON的字段。该过程已完成,但我无法处理逻辑。有人可以告诉我这是如何工作的吗?

这是用于数据仓库中的维表的。

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 :(得分:1)

在存储过程中执行此操作的一种方法(还有其他方法):

注意:请勿为表列名使用保留字!

    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);

答案 1 :(得分:1)

请查看您可以在其他语句中使用的CASE expression的说明。

它与Case Statement不同。

在这种情况下,您必须使用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)
);