Подсказка о раскрытии представления
Функция
«Раскрытие» представления (VIEW) в случае наличия у него только простых предикатов.
Например, пусть создано представление test_view
:
create or replace table test1( i1 int, j1 int ); insert into test1 values (1, 1); insert into test1 values (2, 2); create or replace table test2( i2 int, j2 int ); insert into test2 values (1, 0); insert into test2 values (2, 1); insert into test2 values (3, 2); create or replace view test_view as select i1, i2 from test1, test2 where j1=j2;
Запрос типа
select * from test_view where i2 = 2;
после подстановки текста представления будет иметь вид:
select i1, i2 from (select i1, i2 from test1, test2 where j1=j2) where i2=2;
При использовании подсказки запрос будет преобразован к следующему виду:
select i1, i2 from test1, test2 where i2=2 and j1=j2;
Спецификация
::=
| /* +EXPAND([ имя схемы.]имя представления ON |OFF) */}
Синтаксические правила
-
Если
< имя схемы >
не задано, используется текущая схема (имя пользователя, подавшего запрос). -
OFF – «раскрытие» представления запрещено.
-
ON – «раскрытие» представления будет произведено, если это возможно (даже если есть сложные предикаты).
-
Подсказка должна размещаться в конце текста запроса (перед точкой с запятой).
Примеры
-
select * from test_view where i2 = 2 /*+EXPAND(TEST_VIEW OFF)*/;
«Раскрытие» представления запрещено.
-
select * from test_view where i2 in (select $$$S11 from $$$SYSRL) /*+EXPAND(SYSTEM.TEST_VIEW ON)*/;
«Раскрытие» представления будет произведено, если это возможно.