Есть два способа, как можно достичь этого. Во-первых, используя динамический SQL в хранимой процедуре. Что-то в этом роде:
PROCEDURE CR_VIEW IS
cond_str VARCHAR2...
BEGIN
...
SELECT FUNC_CON INTO cond_str FROM DUAL;
EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW ... AS SELECT ... FROM ...
WHERE ' || cond_str;
...
END CR_VIEW;
Или просто путем непосредственной реализации вашей функции в создании оператора представления с использованием операторов условий. Для exapmle:
CREATE OR REPLACE VIEW ... AS SELECT ... FROM ...
WHERE ((CASE WHEN (*condition on using condition*)
THEN (*your condition, returning 1 then true*) ELSE 1 END = 1) AND ...
Но второй будет намного сложнее поддерживать.
Для exapmle, у вас есть таблица заказов:
t_orders (order_id НОМЕР, ORDER_NAME VARCHAR2, order_sum NUMBER)
И вы хотите, чтобы создать представление, которое покажет вы заказываете сумму более 100 $, но используете это условие только несколько в первый день месяца. Затем, вид, который будет использовать условие на сумму только в первый день месяца, будет выглядеть следующим образом:
CREATE OR REPLACE VIEW V_ORDERS AS SELECT order_name FROM t_orders
WHERE (CASE WHEN EXTRACT(day from current_date) = 1 THEN (CASE WHEN (order_sum > 100) THEN 1 ELSE 0 END) ELSE 1 END = 1)
Но, как я сказал, что это плохая практика, и это ужасно, чтобы поддерживать, вы буквально копируя ваши функция, генерирующая условие в запросе. Вы действительно должны рассмотреть хранимую процедуру :)
Это сообщение об ошибке, потому что оно неверно SQL - вы не говорите, что делать с результатами подзапроса, т.е. он отсутствует * «выражение» *. –
Вы можете предложить альтернативу для использования этой функции в предложении WHERE SQL? – user1986608