Я попытался создать представление с параметрами для динамического получения данных.
(Я не могу использовать условие WHERE, так как сам оператор выбора изменяется в зависимости от параметров)
Для этого я написал процедуру, которая возвращает мне необходимые данные как тип объекта оракула.
FUNCTION get_data(p_pk_id NUMBER, p_tab_type VARCHAR2)
RETURN M_TYPE_DATA_TAB
AS
v_table_collection M_TYPE_DATA_TAB;
BEGIN
-- my sql query which will change based on the params
RETURN v_table_collection;
END;
и я запускаю запрос выбора следующим образом.
SELECT * FROM TABLE(get_data(12345, 'MYTAB'));
что дает мне данные менее чем за 1 секунду.
для того же оператора select я создал представление как
CREATE OR REPLACE VIEW my_view
AS SELECT * FROM TABLE(get_data(12345, 'MYTAB'));
если я запрашиваю представление
SELECT * FROM my_view
для получения тех же данных требуется более 6 секунд.
Есть идеи, почему существует такая большая разница при запросе одних и тех же данных.
Займет ли просмотр больше времени, чем обычный запрос?
select * from
поверх чего-либо не имеет значения. Нам нужно точно знать, что делает ваше дело особенным. - person Jon Heller   schedule 13.12.2013