简体   繁体   English

使用IF / ELSE的DB2存储过程

[英]DB2 stored procedure with IF/ELSE

I thought this would be fairly simple but I'm still a bit stumped. 我觉得这很简单,但我还是有点难过。

I have a stored procedure in db2 where I'm submitting a string for the variable IN_TAG_DATA . 我在db2中有一个存储过程,我在那里为变量IN_TAG_DATA提交一个字符串。 This would be something like 'Holiday', 'Weekday', 'Christmas Day', etc. 这将是“假日”,“平日”,“圣诞节”等。

When I feed that to the proc, I want it to see if that text already exists in tag_data and if so return the tag_id . 当我喂的是对PROC,我想它,看看是否能在文中已经存在tag_data如果这样返回tag_id If it doesn't exist, I want it to insert it and return the newly created tag_id. 如果它不存在,我希望它插入并返回新创建的tag_id。

I'm a good bit of the way there but I can't quite figure out how to finally connect all the dots here. 我是一个很好的方式,但我不知道如何最终连接这里的所有点。

Any help is appreciated 任何帮助表示赞赏

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

UPDATED VERSION: 更新后的版本:

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

Add this: 添加这个:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM