Хранимая процедура DB2 с IF / ELSE - PullRequest
0 голосов
/ 17 апреля 2019

Я думал, что это будет довольно просто, но я все еще немного озадачен.

У меня есть хранимая процедура в db2, где я отправляю строку для переменной IN_TAG_DATA. Это может быть что-то вроде «Праздник», «День недели», «Рождество» и т. Д.

Когда я передаю это процессу, я хочу, чтобы он увидел, существует ли этот текст в 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 голосов
/ 17 апреля 2019

Добавить это:

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

...