У меня есть самоссылающаяся таблица в Oracle 9i и представление, которое получает из нее данные:
CREATE OR REPLACE VIEW config AS
SELECT c.node_id,
c.parent_node_id,
c.config_key,
c.config_value,
(SELECT c2.config_key
FROM vera.config_tab c2
WHERE c2.node_id = c.parent_node_id) AS parent_config_key,
sys_connect_by_path(config_key, '.') path,
sys_connect_by_path(config_key, '->') php_notation
FROM config_tab c
CONNECT BY c.parent_node_id = PRIOR c.node_id
START WITH c.parent_node_id IS NULL
ORDER BY LEVEL DESC
В таблице хранится конфигурация для приложения PHP. Теперь мне нужно использовать ту же конфигурацию в представлении оракула.
Я хотел бы выбрать некоторые значения из представления по пути, но, к сожалению, это занимает 0,15 с, поэтому это неприемлемая стоимость.
SELECT * FROM some_table
WHERE some_column IN (
SELECT config_value FROM config_tab WHERE path = 'a.path.to.config'
)
Сначала я думал об индексе функции на sys_connect_by_path, но это невозможно, так как для этого требуется также предложение CONNECT BY.
Любые предложения, как я могу эмулировать индекс в столбце пути из представления «config»?