Oracle:创建一个 returns 一组值的函数?
Oracle: Create a function that returns a set of values?
我有 table 个关键字
select * from keywords;
id kw
-- --
1 foo
1 bar
2 foo
以及一个查询,该查询将根据这些关键字从主 table 中 select 行。
select id, stuff from assets
where id in (select unique id from keywords where kw = 'foo');
id stuff
-- -----
1 ...
2 ...
如何将子查询变成函数?即我想要一个函数 return 一组可由 IN 子句使用的值。
select id, stuff from assets
where id in HAS_KEYWORD('foo');
Table 名称略有不同,但解决方案有效
create table tab (
key number,
val number
);
create table foe(
col1 number,
col2 varchar2(3)
);
insert into tab values (0,3);
insert into tab values (1,4);
insert into tab values (2,5);
insert into foe values (3,'YES');
insert into foe values (4,'YES');
insert into foe values (5,'NO');
create type t_return is table of number;
/
create or replace function fnc(str varchar2)
return t_return pipelined is
begin
for rec in (select col1 from foe where col2 = str) loop
pipe row(rec.col1);
end loop;
end;
/
select * from tab where val in (select * from table(fnc('YES')))
我有 table 个关键字
select * from keywords;
id kw
-- --
1 foo
1 bar
2 foo
以及一个查询,该查询将根据这些关键字从主 table 中 select 行。
select id, stuff from assets
where id in (select unique id from keywords where kw = 'foo');
id stuff
-- -----
1 ...
2 ...
如何将子查询变成函数?即我想要一个函数 return 一组可由 IN 子句使用的值。
select id, stuff from assets
where id in HAS_KEYWORD('foo');
Table 名称略有不同,但解决方案有效
create table tab (
key number,
val number
);
create table foe(
col1 number,
col2 varchar2(3)
);
insert into tab values (0,3);
insert into tab values (1,4);
insert into tab values (2,5);
insert into foe values (3,'YES');
insert into foe values (4,'YES');
insert into foe values (5,'NO');
create type t_return is table of number;
/
create or replace function fnc(str varchar2)
return t_return pipelined is
begin
for rec in (select col1 from foe where col2 = str) loop
pipe row(rec.col1);
end loop;
end;
/
select * from tab where val in (select * from table(fnc('YES')))