DB2中不带过程的条件语句

DB2中不带过程的条件语句,db2,Db2,我需要在DB2中有条件地执行语句。我搜索了DB2文档,虽然if..then..elseif可以达到这个目的。但是我不能在没有程序的情况下使用if 我的DB2Verion是9.7.6 我的要求是我有一个表来表示组(名称,gpu id)。我还有另一个表组\u attr(gp\u id,value,elem\u id)。我们现在可以忽略该需求的元素id ->我需要检查组是否有特定名称 ->如果它没有什么可以做的 ->如果没有,我需要将其添加到组中。然后我需要在组\u attr中插入相应的行。假设值和元

我需要在DB2中有条件地执行语句。我搜索了DB2文档,虽然if..then..elseif可以达到这个目的。但是我不能在没有程序的情况下使用if

我的DB2Verion是9.7.6

我的要求是我有一个表来表示组(名称,gpu id)。我还有另一个表组\u attr(gp\u id,value,elem\u id)。我们现在可以忽略该需求的元素id

->我需要检查组是否有特定名称

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


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

您可以为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版开始的,您可以为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版以来,很多这方面的功能都出现了。我为条件插入找到了一个解决方案。对于我提到的场景,解决方案可以是这样的

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

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

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

如果没有过程,SQL是非过程的,但是如果您提供更多细节,可能会有一种方法。您熟悉这个案例吗?结束表达式?您试图解决的实际问题是什么?另外,请发布您正在使用的DB2版本和DB2的发行版。没有过程,SQL是非过程的,但是如果您提供更多细节,可能有一种方法。您是否熟悉这个案例…结束表达式?您试图解决的实际问题是什么?另外,请发布您正在使用的DB2版本和DB2发行版。