IF :P123_Type = 'C' THEN
RETURN
LOV_1
ELSE
RETURN
LOV_2
END IF;
我有2个共享组件的LOV&想要达到如上所述。怎么做到了?
答案 0 :(得分:1)
可以通过apex_application_lovs
视图访问共享组件LOV。
DESC apex_application_lovs
Name Null Type
---------------------- -------- --------------
WORKSPACE NOT NULL VARCHAR2(255)
WORKSPACE_DISPLAY_NAME VARCHAR2(4000)
APPLICATION_ID NOT NULL NUMBER
APPLICATION_NAME NOT NULL VARCHAR2(255)
LIST_OF_VALUES_NAME NOT NULL VARCHAR2(255)
LOV_TYPE VARCHAR2(7)
LIST_OF_VALUES_QUERY VARCHAR2(4000)
LOV_ENTRIES NUMBER
IS_SUBSCRIBED VARCHAR2(3)
SUBSCRIBED_FROM VARCHAR2(297)
LAST_UPDATED_BY VARCHAR2(255)
LAST_UPDATED_ON DATE
COMPONENT_COMMENT VARCHAR2(4000)
LOV_ID NOT NULL NUMBER
REFERENCED_LOV_ID NUMBER
COMPONENT_SIGNATURE VARCHAR2(436)
因此,您可以将页面上的“选择列表”项目上的值列表设置为 PL / SQL函数体返回SQL查询。
作为函数体,您可以使用以下内容:
DECLARE
ret apex_application_lovs.list_of_values_query%TYPE;
BEGIN
IF :P123_Type = 'C' THEN
select list_of_values_query
into ret
from apex_application_lovs
where list_of_values_name = 'LOV_1';
ELSE
select list_of_values_query
into ret
from apex_application_lovs
where list_of_values_name = 'LOV_2';
END IF;
return ret;
END;
如果可以动态更改P123_TYPE
并且此列表是级联列表,则需要在刷新列表时将项目添加到要提交到会话状态的项目。
答案 1 :(得分:0)
两个选项:
忘记共享组件LOV并使用函数返回要在LOV中使用的查询(仅包含一个项目且没有显示条件)。类似的东西:
function f_get_lov(p_condition in number)
return varchar2 as
l_sql varchar2(4000);
begin
if p_condition = 1 then
-- query lov_1
l_sql := 'select display_value
, return_value
from tb1';
else
-- query lov 2
l_sql := 'select display_value
, return_value
from tb2';
end if;
return l_sql;
end f_get_lov;
答案 2 :(得分:0)
为什么不根据功能创建动态lov?这与Boris建议的不同,因为它不需要您在APEX之外创建一个函数,而只需要另一个LOV。
Declare
v_type varchar2(1) := :P123_TYPE;
Begin
If v_type = 'C' then
Return 'select column_a d, column_b r
from some_table
where some_column = ''CONDITION 1'';
Else
Return 'select column_a d, column_b r
from some_table
where some_column = ''CONDITION 2'';
End if;
End;
注意我是如何在单引号上加倍逃避它们的;如果需要,你可以选择以不同的方式逃避这些角色。