IF :P123_Type = 'C' THEN
RETURN
LOV_1
ELSE
RETURN
LOV_2
END IF;
我有 2 个共享组件的 LOV 并希望实现上述目标。如何实现它?
IF :P123_Type = 'C' THEN
RETURN
LOV_1
ELSE
RETURN
LOV_2
END IF;
我有 2 个共享组件的 LOV 并希望实现上述目标。如何实现它?
可以通过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)
因此,您可以将页面上 Select List 项上的值列表设置为PL/SQL Function Body 返回 SQL Query。
作为函数体,您可以使用以下内容:
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
可以动态更改并且此列表是级联列表,则您需要将项目添加到要在列表刷新时提交到会话状态的项目中。
两种选择:
忘记您的共享组件 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;
Why not create a dynamic lov based on a function? This is different than what Boris has suggested since it does not require you to create a function outside of APEX, but instead just another 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;
notice how I've doubled up on the single quotes to escape them; you could chose to escape these characters a different way if desired..