У меня есть курсор с таким соединением:
CURSOR C1 IS
SELECT *
FROM table_1 a
JOIN table_2 b
ON b.ID_1 = a.ID_1
WHERE TABLE_ID IS NOT NULL
AND TABLE_ID = p_input_id;
Я хочу изменить курсор и добавить еще 3 соединения, только если p_input_id найден в таблице метаданных. Итак, я хочу сделать что-то вроде этого:
CURSOR C1 IS
SELECT *
FROM table_1 a
JOIN table_2 b
ON b.ID_1 = a.ID_1
CASE
WHEN EXISTS (SELECT 1
FROM METADATA_TABLE
WHERE INPUT_ID = p_input_id
AND FLAG = 'Y')
THEN
JOIN table_3 c
ON c.ID_2 = b.ID_2
JOIN table_4 d
ON d.ID_3 = c.ID_3
END
WHERE TABLE_ID IS NOT NULL
AND TABLE_ID = p_input_id;
Как я могу это сделать? Я мог бы рассмотреть возможность использования LEFT JOIN вместо case/join. Есть ли какие-либо проблемы с этим?
CURSOR C1 IS
SELECT *
FROM table_1 a
JOIN table_2 b
ON b.ID_1 = a.ID_1
LEFT JOIN table_3 c
ON c.ID_2 = b.ID_2
LEFT JOIN table_4 d
ON d.ID_3 = c.ID_3
WHERE TABLE_ID IS NOT NULL
AND TABLE_ID = p_input_id;
Я пытаюсь не сломать текущий курсор для p_input_id, которые его используют. Будут новые p_input_id, которые должны использовать дополнительные объединения таблиц.
EXECUTE IMMEDIATE
. Подготовьте строку sql на основе входного значения. - person Lalit Kumar B   schedule 13.04.2020