返回where子句中包含的表的Oracle函数
我想创建一个返回结果表的函数。差不多返回where子句中包含的表的Oracle函数,oracle,plsql,Oracle,Plsql,我想创建一个返回结果表的函数。差不多 select * from address where zipcode in (f_zips_in_radius(45.123,-93.123,50)); 我一直在做这个函数,但没有任何东西可以用,所以我会排除我的尝试,以免把问题弄糊涂 假设这是可能的,我将如何实现它?问题是zipcode可以是任何东西,因此如果你把它当作一个数字来处理,那么它就会变得更容易。你必须计算x和y之间的每一个可能的排列,然后把它传回去 因为我不知道你的应用程序和案例,你能期望多
select * from address where zipcode in (f_zips_in_radius(45.123,-93.123,50));
我一直在做这个函数,但没有任何东西可以用,所以我会排除我的尝试,以免把问题弄糊涂
假设这是可能的,我将如何实现它?问题是zipcode可以是任何东西,因此如果你把它当作一个数字来处理,那么它就会变得更容易。你必须计算x和y之间的每一个可能的排列,然后把它传回去 因为我不知道你的应用程序和案例,你能期望多少结果?因为in子句可能非常昂贵,并且您可能必须实现结果集。。或者做一些聪明的把戏
而且我猜你必须把这个放到桌子上 一系列评论让我找到了答案。谢谢你没有名字的“马”和“雷·托尔” 这是我最后的解决办法
CREATE OR REPLACE PACKAGE pkg_distance AS
TYPE vcharset_t IS TABLE OF VARCHAR2(20);
FUNCTION zips_in_radius(i_lat number, i_lon number, i_radius NUMBER) RETURN vcharset_t PIPELINED;
END;
/
CREATE OR REPLACE PACKAGE BODY pkg_distance AS
FUNCTION zips_in_radius(i_lat number, i_lon number, i_radius NUMBER) RETURN vcharset_t PIPELINED IS
BEGIN
for r in (
select zipcode from zipdata z where f_distance(i_lat, i_lon, z.lat, z.lon) <= i_radius
)
loop
pipe row ( r.zipcode);
end loop;
return;
END;
END;
在我看来,它还有一个额外的“select*from TABLE(”,让我感到舒服,但仍然可以管理。这里可能的帮助:查看手册:看到一个问题,所以上面的示例不是针对这个问题的,我将在实际实现中负责规范zipcodes。
--Boston City Centered on 42.360637,-71.0587120
select * from address a
where substr(a.zipcode,1,5) in
(select * from TABLE(pkg_distance.zips_in_radius(42.360637,-71.0587120,60)))