问题描述
select GET_USER_OFFICE_CODES(10) FROM DUAL;
返回
DB.OFFICE_CODES(3,4,5,6,7,8,9)
最终我想创建一个在APEX 5.1应用程序中使用此功能的lov。
例如,
select office_code,id
from offices where ID IN (select GET_USER_OFFICE_CODES(10) FROM DUAL);
很显然,我在处理数据类型时遇到了麻烦。
有人可以帮我在sql中按摩结果,以便我可以在sql中执行以下操作吗?
select *
from offices
where ID IN (select GET_USER_OFFICE_CODES(10) FROM DUAL);
解决方法
如果您描述该功能的确切作用,那将有所帮助。我现在只是猜测。
功能:
SQL> create or replace function f_test(par_in in number)
2 return sys.odcinumberlist
3 is
4 l_arr sys.odcinumberlist := sys.odcinumberlist();
5 begin
6 l_arr.extend;
7 l_arr(l_arr.last) := 10;
8 l_arr.extend;
9 l_arr(l_arr.last) := 20;
10 return l_arr;
11 end;
12 /
Function created.
返回什么?
SQL> select f_test(10) from dual;
F_TEST(10)
--------------------------------------------------------------------------------
ODCINUMBERLIST(10,20)
如何在Apex中使用它?
SQL> select deptno d,2 dname r
3 from dept d
4 where d.deptno in (select * from table(f_test(10)));
D R
---------- --------------
10 ACCOUNTING
20 RESEARCH
SQL>
,
假设DB.OFFICE_CODES
是SQL范围内定义的集合,则可以使用MEMBER OF
运算符:
select *
from offices
where ID MEMBER OF GET_USER_OFFICE_CODES(10);
哪个输出:
ID | LOCATION -: | :--------- 3 | Location 3 4 | Location 4 5 | Location 5 6 | Location 6 7 | Location 7 8 | Location 8 9 | Location 9
假设您的架构称为DB
,这是您的设置示例:
CREATE TYPE DB.OFFICE_CODES IS TABLE OF NUMBER;
CREATE FUNCTION GET_USER_OFFICE_CODES(
value IN INT
) RETURN DB.OFFICE_CODES
IS
BEGIN
-- Do something to get your values.
RETURN DB.OFFICE_CODES(3,4,5,6,7,8,9);
END;
/
然后,如果您有offices
表:
CREATE TABLE offices ( id,location ) AS
SELECT LEVEL,'Location ' || LEVEL FROM DUAL CONNECT BY LEVEL <= 10;
db 提琴here