返回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)))