具有IF / ELSE的DB2存储过程

时间:2019-04-17 13:57:55

标签: sql stored-procedures db2

我以为这很简单,但我还是有些困惑。

我在db2中有一个存储过程,我在其中为变量IN_TAG_DATA提交一个字符串。就像“假日”,“平日”,“圣诞节”等。

当我将其提供给proc时,我希望它查看tag_data中是否已存在该文本,如果是,则返回tag_id。如果它不存在,我希望它插入并返回新创建的tag_id。

我在这里很方便,但我还不太清楚如何最终将这里的所有点连接起来。

感谢您的帮助

IN_TAG_DATA
OUT_TAG_ID

P1 : BEGIN ATOMIC

DECLARE V_TAG_ID INTEGER;

SELECT CAST(NEXT VALUE FOR SCHEMA . TAG_ID_SEQ AS INTEGER)
INTO V_TAG_ID
FROM SYSIBM . SYSDUMMY1;

IF
/*
IF EXISTS BASED ON IN_TAG_DATA, GET ID. ELSE INSERT AND RETURN created ID
*/
THEN
BEGIN 

END;
ELSE
BEGIN
INSERT INTO SCHEMA.TAGS(TAG_DATA)
VALUES(IN_TAG_DATA)
END;
END IF;

SET OUT_TAG_ID
END P1

更新版本:

P1 : BEGIN ATOMIC

DECLARE V_TAG_ID INTEGER;

SELECT CAST(NEXT VALUE FOR SCHEMA. TAG_ID_SEQ AS INTEGER)
INTO V_TAG_ID
FROM SYSIBM . SYSDUMMY1;

BEGIN
IF
(SELECT TAG_ID FROM
SCHEMA.CAMPAIGN_TAGS
WHERE TAG_DATA=IN_TAG_DATA) IS NOT NULL
THEN
SET OUT_TAG_ID = tag_id;
ELSE

INSERT INTO SCHEMA.CAMPAIGN_TAGS(TAG_DATA)
VALUES(IN_TAG_DATA);
END IF;
END;

SET OUT_TAG_ID
END P1

1 个答案:

答案 0 :(得分:0)

添加此内容:

SET OUT_TAG_ID = (SELECT tag_id FROM
your_table
where TAG_DATA=IN_TAG_DATA)
IF 
OUT_TAG_ID  is null
THEN