Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE-子句中的变量-返回数字列表的函数_Oracle_Function - Fatal编程技术网

ORACLE-子句中的变量-返回数字列表的函数

ORACLE-子句中的变量-返回数字列表的函数,oracle,function,Oracle,Function,我正在尝试构建一个函数,该函数将返回一个数字列表,以便在in子句中使用 该函数需要一个参数parentcustomer\u id,并且该函数需要运行另一个SQL查询以返回与该父级相关的customer\u id 查询用法示例: SELECT customername FROM customertable WHERE customer_id IN myfunction(parentcustomer_id) 预期结果: SELECT customername FROM customertab

我正在尝试构建一个函数,该函数将返回一个数字列表,以便在in子句中使用

该函数需要一个参数parentcustomer\u id,并且该函数需要运行另一个SQL查询以返回与该父级相关的customer\u 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抱怨数字无效

我在谷歌上搜索了好几天,尝试了无数种方法来实现这一点,但都没有成功


有什么想法吗?

为什么不在没有函数的情况下在一个查询中执行此操作

SELECT customername 
FROM customertable c
WHERE customer_id IN (SELECT parentcustomer_id 
FROM parentCustomerTable p 
WHERE p.customer_id = c.customer_id)

或者甚至将两个表连接在一起,而不使用IN

为什么不在一个查询中使用该函数呢

SELECT customername 
FROM customertable c
WHERE customer_id IN (SELECT parentcustomer_id 
FROM parentCustomerTable p 
WHERE p.customer_id = c.customer_id)

或者甚至将两个表连接在一起,而不使用下面的IN

查询将以逗号分隔所有值。您可以从函数out参数返回相同的值

select listagg(parentcustomer_id,',') within group (order by parentcustomer_id) cnt from parentCustomerTable where parentcustomer_id = 'your input'; 

下面的查询将以逗号分隔所有值,您可以从函数输出参数返回相同的值

select listagg(parentcustomer_id,',') within group (order by parentcustomer_id) cnt from parentCustomerTable where parentcustomer_id = 'your input'; 

你必须创建一个学院

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;


你必须创建一个学院

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;


发布你为实现此目标而创建的功能发布你为实现此目标而创建的功能是的,我绝对可以做到。我之所以希望在函数中执行此操作,是因为它在我们的环境中非常常见,并且在非常大的查询中被多次使用。该功能将大大简化查询。谢谢你的回复!是的,我绝对能做到。我之所以希望在函数中执行此操作,是因为它在我们的环境中非常常见,并且在非常大的查询中被多次使用。该功能将大大简化查询。谢谢你的回复!谢谢你!我对函数中select语句的INTO部分有困难。我收到一个错误:表达式“NUMBERS”不合适,因为赋值语句的左侧在SUMPROD.customer.customer.customer\u id%中创建或替换函数SUMPROD\u GALAXY.ret\u NUMBERS p\u customer\u id%类型返回编号为v NUMBERS:=新编号;开始从sumprod.businesspartnerpartnerrole将customer0.customer\u id选择为数字……。为了澄清,我必须在函数中添加一个参数以及输入的customer id。预期返回是其他相关customer id的数组。选择customer0.customer\u id批量收集到v FROM。。。。其中,v是声明为v数字的变量,数字是使用create type numbers创建的模式级集合是数字表;查看oracle的文档,阅读有关集合和“批量收集”queryPerfect的内容—只需少量阅读,并提供大量帮助—所有内容都已分类!非常感谢谢谢你!我对函数中select语句的INTO部分有困难。我收到一个错误:表达式“NUMBERS”不合适,因为赋值语句的左侧在SUMPROD.customer.customer.customer\u id%中创建或替换函数SUMPROD\u GALAXY.ret\u NUMBERS p\u customer\u id%类型返回编号为v NUMBERS:=新编号;开始从sumprod.businesspartnerpartnerrole将customer0.customer\u id选择为数字……。为了澄清,我必须在函数中添加一个参数以及输入的customer id。预期返回是其他相关customer id的数组。选择customer0.customer\u id批量收集到v FROM。。。。其中,v是声明为v数字的变量,数字是使用create type numbers创建的模式级集合是数字表;查看oracle的文档,阅读有关集合和“批量收集”queryPerfect的内容—只需少量阅读,并提供大量帮助—所有内容都已分类!非常感谢