У меня есть таблица с самообращением в 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"?