如何从查询中获取要求记录

时间:2019-05-13 09:56:17

标签: sql oracle oracle11g oracle-sqldeveloper

在给定的图像中,我已经附加了我的表模式, 我想针对适当的角色获取menuid。

Stream

它应该返回 MenuId 2.03, 2.04和 2.05 因为这些MenuId包含RoleId为1和2

enter image description here

请帮助我,使MenuId与角色无关

2 个答案:

答案 0 :(得分:1)

使用in条件

Select MenuId from tblAccess where RoleId in (1,2);

答案 1 :(得分:0)

在此处(Oracle Apex)了解您的历史记录,并看到roleid = 1:2,它看起来像是可以进行多项选择的Apex穿梭项目或选择列表项目。如果是这样,那么您就必须将该冒号分隔的值分成几行,并按照以下SQL * Plus示例使用它:

SQL> var p1_roleid varchar2(10);
SQL> exec :p1_roleid := '1:2';

PL/SQL procedure successfully completed.

SQL> with tblaccess (menuid, roleid) as
  2    (select 2.03, 2 from dual union all
  3     select 2.04, 2 from dual union all
  4     select 2.05, 1 from dual union all
  5     select 2.06, 3 from dual
  6    )
  7  select menuid
  8  from tblaccess
  9  where roleid in (select regexp_substr(:P1_ROLEID, '[^:]+', 1, level)
 10                   from dual
 11                   connect by level <= regexp_count(:P1_ROLEID, ':') + 1
 12                  )
 13  order by menuid;

    MENUID
----------
      2,03
      2,04
      2,05

SQL>

在Apex中,这看起来像

select menuid
from tblaccess
where roleid in (select regexp_substr(:P1_ROLEID, '[^:]+', 1, level)
                 from dual
                 connect by level <= regexp_count(:P1_ROLEID, ':') + 1
                )
order by menuid;