Я думал, что это будет довольно просто, но я все еще немного озадачен.
У меня есть хранимая процедура в 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