Oracle 如何从函数返回一个列表;选择在……中“;陈述
我希望为ERP系统编写一个函数,该函数返回一个列表,可用于“select…in”语句。例如 而不是 “从A中选择*,其中b位于('c','d','e')” 我需要像 “从A中选择*其中b在(获取项目('A'))” 我尝试过一个函数,它可以创建“c”、“d”、“e”位,但没有给出任何结果Oracle 如何从函数返回一个列表;选择在……中“;陈述,oracle,plsql,Oracle,Plsql,我希望为ERP系统编写一个函数,该函数返回一个列表,可用于“select…in”语句。例如 而不是 “从A中选择*,其中b位于('c','d','e')” 我需要像 “从A中选择*其中b在(获取项目('A'))” 我尝试过一个函数,它可以创建“c”、“d”、“e”位,但没有给出任何结果 我试过几种方法,但似乎没有找到正确的主意。我可以编写API/函数,但从函数中获取项目列表并将其放入select语句的最佳方法是什么?数组或sys refcursor可以工作吗?一个选项是创建一个返回表的函数。下面
我试过几种方法,但似乎没有找到正确的主意。我可以编写API/函数,但从函数中获取项目列表并将其放入select语句的最佳方法是什么?数组或sys refcursor可以工作吗?一个选项是创建一个返回表的函数。下面是一个基于Scott示例模式的示例。函数接受部门号并返回该部门号中的EMPNO列表
SQL> create or replace function get_emps (par_deptno in number)
2 return sys.odcinumberlist
3 is
4 l_list sys.odcinumberlist := sys.odcinumberlist ();
5 begin
6 select empno
7 bulk collect into l_list
8 from emp
9 where deptno = par_deptno;
10
11 return l_list;
12 end;
13 /
Function created.
看起来像您的代码(在中有):
使用连接的代码(结果相同):
如何派生谓词中要使用的项的函数?我这样问是因为函数可能是错误的解决方案-如果函数使用查询来派生项,视图可能会更好。
SQL> select e.empno, e.ename, e.job, e.sal
2 from emp e
3 where e.empno in (select * from table(get_emps(10)));
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7782 CLARK MANAGER 2450
7839 KING PRESIDENT 10000
7934 MILLER CLERK 1300
SQL> select e.empno, e.ename, e.job, e.sal
2 from emp e join table(get_emps(10)) t on e.empno = t.column_value;
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7782 CLARK MANAGER 2450
7839 KING PRESIDENT 10000
7934 MILLER CLERK 1300
SQL>