¿Por qué Oracle SQL Optimizer ignora el predicado de índice para esta vista?

Estoy intentando optimizar un conjunto de procesos almacenados que van contra muchas tablas, incluida esta vista. La vista es como tal:

Tenemos TBL_A (id, hist_date, hist_type, other_columns) con dos tipos de filas: hist_type 'O' vs. hist_type 'N'. La vista se une a la tabla A y transpone las N filas contra las O filas correspondientes. Si no existe una fila N para la fila O, se repiten los valores de la fila O. Al igual que:

CREATE OR REPLACE FORCE VIEW V_A (id, hist_date, hist_type, other_columns_o, other_columns_n)
select 
o.id, o.hist_date, o.hist_type, 
o.other_columns as other_columns_o,
case when n.id is not null then n.other_columns else o.other_columns end as other_columns_n
from
TBL_A o left outer join TBL_A n
on o.id=n.id and o.hist_date=n.hist_date and n.hist_type = 'N'
where o.hist_type = 'O';

TBL_A tiene un índice único en: (id, hist_date, hist_type). También tiene un índice único en: (hist_date, id, hist_type) y esta es la clave principal.

La siguiente consulta está en cuestión (en un proceso almacenado, con x declarado como TYPE_TABLE_OF_NUMBER):

select b.id BULK COLLECT into x from TBL_B b where b.parent_id = input_id;

select v.id from v_a v
where v.id in (select column_value from table(x))
and   v.hist_date = input_date
and   v.status_new = 'CLOSED';

Esta consulta ignora el índice en la columna de identificación al acceder a TBL_A y en su lugar realiza un escaneo de rango utilizando la fecha para recoger todas las filas de la fecha.Entonces Filtra ese conjunto usando los valores de la matriz. Sin embargo, si simplemente doy la lista de identificadores como una lista de números, el optimizador usa el índice muy bien:

select v.id from v_a v
where v.id in (123, 234, 345, 456, 567, 678, 789)
and   v.hist_date = input_date
and   v.status_new = 'CLOSED';

El problema tampoco existe cuando se va directamente contra TBL_A (y tengo una solución que lo hace, pero no es lo ideal). ¿Existe una manera de que el optimizador recupere primero los valores de la matriz y los use como predicados al acceder? ¿la mesa? ¿O una buena manera de reestructurar la vista para lograr esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta