Bitte beachten Sie das folgende Skript:
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
*/
Kann ich mich darauf verlassen f(x), ausgeführt zu werden, bevor der Kontext in der Ansicht gelesen wird, wie es in diesem Testfall unter 10.2 der Fall war?
SELECT stuff FROM dbo.FuncReturningTable(param)oder ähnliches. Oracle hat wahrscheinlich eine gleichwertige Funktionalität. Wenn ich dies über große Datenmengen verwende, würde ich die Leistung sorgfältig überwachen: Ich bin mir nicht sicher, wie hell der Abfrageplaner sein müsste, um aus einer solchen Syntax einen effizienten Plan zu erstellen.