У меня есть курсор с объединением, например:
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 IS найден в таблице метаданных. Итак, я хочу сделать что-то вроде этого:
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;
Как я могу выполнить sh это? Я мог бы рассмотреть возможность использования 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, которые должны использовать дополнительные объединения таблиц.