Vui lòng xem xét các kịch bản sau đây:
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
*/
Tôi có thể dựa vào f(x)
việc được thực thi trước khi bối cảnh được đọc bên trong khung nhìn không, vì nó đã có trong trường hợp thử nghiệm này chạy trên 10.2?
SELECT stuff FROM dbo.FuncReturningTable(param)
hoặc tương tự. Oracle có thể có chức năng tương đương. Mặc dù nếu sử dụng điều này trên các tập dữ liệu lớn, tôi sẽ cẩn thận theo dõi hiệu suất: Tôi không chắc người lập kế hoạch truy vấn cần sáng đến mức nào để thực hiện một kế hoạch hiệu quả từ cú pháp đó.