请考虑以下脚本:
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
*/
我f(x)
是否可以依赖于在视图中读取上下文之前执行代码,就像在本测试用例中在10.2上运行它一样?
SELECT stuff FROM dbo.FuncReturningTable(param)
可以执行类似操作。Oracle可能具有等效的功能。尽管如果在大型数据集上使用此方法,则要小心监视性能:我不确定查询计划程序需要多大的亮度才能根据此类语法制定有效的计划。