Por favor considere el siguiente script:
create or replace function f(p_limit in integer) return integer as
begin
set_global_context ('limit', p_limit);
return p_limit;
end;
/
create view v as
select level as val from dual connect by level<=sys_context('global_context','limit');
select f(2), v.* from v;
/*
F(2) VAL
---------------------- ----------------------
2 1
2 2
*/
select f(4), v.* from v;
/*
F(4) VAL
---------------------- ----------------------
4 1
4 2
4 3
4 4
*/
¿Puedo confiar en que f(x)
se ejecute antes de que se lea el contexto dentro de la vista, como se ha ejecutado en este caso de prueba en 10.2?
SELECT stuff FROM dbo.FuncReturningTable(param)
o similar. Oracle probablemente tiene una funcionalidad equivalente. Sin embargo, si uso esto en grandes conjuntos de datos, tendré cuidado de monitorear el rendimiento: no estoy seguro de cuán brillante debería ser el planificador de consultas para hacer un plan eficiente a partir de dicha sintaxis.