没有过程的DB2中的条件语句

时间:2013-09-20 13:39:45

标签: db2

我需要在DB2中有条件地执行语句。我搜索了DB2文档,但 if..then..elseif 将用于此目的。但是如果没有程序,我不能使用 if

我的DB2版本是9.7.6。

我的要求是我有一个表说Group(name,gp_id)。我有另一个表Group_attr(gp_id,value,elem_id)。我们现在可以忽略对elem_id的要求。

- >我需要查看该组是否有特定名称。

- >如果它没有什么可做的。

- >如果没有,我需要将其添加到组中。然后我需要在Group_attr中插入相应的行。假设值和elem_id是静态的。

2 个答案:

答案 0 :(得分:1)

您可以使用PL / SQL的匿名块或SQL PL代码的复合语句。

BEGIN ATOMIC
   FOR ROW AS
     SELECT PK, C1, DISCRETIZE(C1) AS D FROM SOURCE
   DO
     IF ROW.D IS NULL THEN
       INSERT INTO EXCEPT VALUES(ROW.PK, ROW.C1);
     ELSE
       INSERT INTO TARGET VALUES(ROW.PK, ROW.D);
     END IF;
   END FOR;
 END

复合语句:

匿名阻止:

自版本9.7以来,许多此功能都已出现

答案 1 :(得分:0)

我得到了条件插入的解决方案。对于我提到的场景,解决方案可以是这样的。

Insert into Group(name) select 'Name1' from sysibm.sysdummy1 where (select count(*) from Group where name='Name1')=0

Insert into Group_attr(gp_id,value,elem_id) select g.gp_id,'value1','elem1' Group g,group_attr ga where ga.gp_id=g.gp_id and (select count(*) from Group_attr Ga1 where Ga.gp_id=g.gp_id)=0
-- In my case Group_attr will contain some data for sure if the group has exists already