我正在尝试构建一个函数,它将返回一个数字列表,用于IN子句。
该函数需要一个参数(parentcustomer_id),该函数需要运行另一个SQL查询以返回与该父项相关的customer_id。
查询用法示例:
SELECT customername
FROM customertable
WHERE customer_id IN myfunction(parentcustomer_id)
预期结果:
SELECT customername
FROM customertable
WHERE customer_id IN (500006,500007,500008,50009)
该函数应返回以逗号分隔的数字列表,该列表对IN子句有效。
我尝试创建一个返回数字表的“类型”,但Oracle抱怨“无效数字”。
我已经用Google搜索了好几天,并尝试了无数的方法来实现这一目标无济于事。
有什么想法吗?
答案 0 :(得分:0)
为什么不在没有函数
的情况下在一个查询中执行此操作SELECT customername
FROM customertable c
WHERE customer_id IN (SELECT parentcustomer_id
FROM parentCustomerTable p
WHERE p.customer_id = c.customer_id)
甚至联合两个表并且不使用IN
答案 1 :(得分:0)
下面的查询将以逗号分隔给出所有值,您可以从函数输出参数中返回相同的值
select listagg(parentcustomer_id,',') within group (order by parentcustomer_id) cnt from parentCustomerTable where parentcustomer_id = 'your input';
答案 2 :(得分:0)
你必须创建集合。
create type numbers is table of number;
create or replace function ret_numbers return numbers is
v numbers := new numbers();
begin
v.extend(3);
v(1):=1;
v(2):=5;
v(3):=9;
return v;
end;
with test_data as (select level lv from dual connect by level <10)
select * from test_data where lv member of ret_numbers;
或
with test_data as (select level lv from dual connect by level <10)
select * from test_data where lv in (select * from table(ret_numbers)) ;