Si prega di considerare il seguente 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
*/
Posso fare affidamento sull'esecuzione f(x)prima che il contesto venga letto all'interno della vista, come è stato in questo caso test eseguito su 10.2?
SELECT stuff FROM dbo.FuncReturningTable(param)o simile. Oracle ha probabilmente funzionalità equivalenti. Tuttavia, se lo utilizzassi su insiemi di dati di grandi dimensioni, farei attenzione a monitorare le prestazioni: non sono sicuro di quanto sia necessario il pianificatore di query per creare un piano efficiente da tale sintassi.