Это вопрос об Oracle PL / SQL.
У меня есть процедура, в которой точное предложение WHERE не известно до времени выполнения:
DECLARE
CURSOR my_cursor is
SELECT ...
FROM ...
WHERE terms in (
(SELECT future_term2 FROM term_table), -- whether this element should be included is conditional
(SELECT future_term1 FROM term_table),
(SELECT present_term FROM term_table)
);
BEGIN
(the processing)
END;
/
Что за (SELECT... FROM term_table) запрос возвращает 4-символьную строку.
Для решения этой проблемы я подумываю использовать параметризованный курсор:
DECLARE
target_terms SOME_DATATYPE;
CURSOR my_cursor (pi_terms IN SOME_DATATYPE) IS
SELECT ...
FROM ...
WHERE terms in my_cursor.pi_terms;
BEGIN
target_terms := CASE term_digit
WHEN '2' THEN (
(SELECT future_term2 FROM term_table),
(SELECT future_term1 FROM term_table),
(SELECT present_term FROM term_table)
) ELSE (
(SELECT future_term1 FROM term_table),
(SELECT present_term FROM term_table)
)
END;
FOR my_record IN my_cursor (target_terms) LOOP
(the processing)
END LOOP;
END;
/
Проблема в том, чтоТип данных для SOME_DATATYPE должен быть неизвестен мне, а также неизвестно, поддерживает ли Oracle такой параметр курсора вообще.Если поддерживается, является ли способ, показанный выше, для фабрикации значения target_terms правильным?Если нет, то как?
Надеюсь, кто-то, кто знает, может посоветовать.И большое спасибо за помощь.