0
IF :P123_Type = 'C' THEN
  RETURN    
     LOV_1  
ELSE    
  RETURN    
     LOV_2  
END IF;  

我有 2 个共享组件的 LOV 并希望实现上述目标。如何实现它?

4

3 回答 3

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)

因此,您可以将页面上 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可以动态更改并且此列表是级联列表,则您需要将项目添加到要在列表刷新时提交到会话状态的项目中。

于 2017-04-21T06:48:55.210 回答
0

两种选择:

  • 根据您的每个 LOV 创建两个项目,然后根据您的要求调整它们的显示以仅显示其中一个。
  • 忘记您的共享组件 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;
    
于 2017-04-20T08:31:52.180 回答
0

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..

于 2017-04-27T17:00:59.240 回答