首先,谢谢你,堆叠器,帮助我解决了我在这里发布的大部分问题!我需要再次帮助。如果我需要进一步澄清,请告诉我。提前致谢。 代码是,
根据效果因素创建了一个流水线查询。
create package pkg_emp
as
type emprec is record
( id int
, name varchar2(10)
);
type tb_emp IS TABLE OF emprec;
function f_emp(id number) return tb_emp PIPELINED;
end pkg_emp;
/
Package created.
create package body pkg_emp
as
function f_emp(p_id) return tb_emp PIPELINED
is
out_rec emprec;
begin
for i in (select id,name from emp_records where id =p_id) loop
out_rec.id := i.id;
out_rec.name := i.name;
pipe_row(out_rec);
end loop;
return;
end f_emp;
end mypkg;
/
现在,当我使用下面的表函数选择查询时,
select * from table(pkg_emp.f_emp(100));
记录完美显示
id name
----- ------
100 marc
100 paul
100 sam
100 stacker
现在,真正的问题是如何使用where子句动态传递值。
这样的事情,
select * from table(pkg_emp.f_emp(%id)) where id=30;
注意:我之前提到过%只是为了理解。喜欢用%来表示替换30的值作为函数的输入。
答案 0 :(得分:1)
尝试使用子查询因子(WITH)子句:
WITH myId AS (
SELECT 30 As id FROM dual
)
select * from table(pkg_emp.f_emp(myId.id)) where id=myId.id;
也可以使用子查询和交叉应用(在Oracle 12c上):
select x.*
from (
SELECT 30 As id FROM dual
) MyId
CROSS APPLY(
table(pkg_emp.f_emp(myId.id)) where id=myId.id
) x