创建一个动态值列表
Create a Dynamic List of Values
我有一个函数 returns 代码数组 (NUMBER)。
select GET_USER_OFFICE_CODES(10) FROM DUAL;
returns
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.
它是什么return?
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
table:
CREATE TABLE offices ( id, location ) AS
SELECT LEVEL, 'Location ' || LEVEL FROM DUAL CONNECT BY LEVEL <= 10;
db<>fiddle here
我有一个函数 returns 代码数组 (NUMBER)。
select GET_USER_OFFICE_CODES(10) FROM DUAL;
returns
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.
它是什么return?
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
table:
CREATE TABLE offices ( id, location ) AS
SELECT LEVEL, 'Location ' || LEVEL FROM DUAL CONNECT BY LEVEL <= 10;
db<>fiddle here