Plsql 使用复选框选定的元素来筛选报告

Plsql 使用复选框选定的元素来筛选报告,plsql,oracle-apex-5,Plsql,Oracle Apex 5,我在为我的申请做一份正确的报告方面有问题。报告应该返回一组参数的空闲房间,包括设备列表。但是,我不能将设备搜索包含在我的活动间报告中 以下是我得到的SQL请求: SELECT s.code || ' ' || s.nom as Salle, s.capacite, LISTAGG(eq.libelle, ', ') WITHIN GROUP (ORDER BY eq.code) as Equipements, b.libelle as Batiment, s.numero FROM SALLES

我在为我的申请做一份正确的报告方面有问题。报告应该返回一组参数的空闲房间,包括设备列表。但是,我不能将设备搜索包含在我的活动间报告中

以下是我得到的SQL请求:

SELECT s.code || ' ' || s.nom as Salle, s.capacite, LISTAGG(eq.libelle, ', ') WITHIN GROUP (ORDER BY eq.code) as Equipements, b.libelle as Batiment, s.numero
FROM SALLES s
INNER JOIN batiments b ON
b.numero = s.bat_numero
INNER JOIN sal_gpe sg ON
s.numero = sg.sal_numero
INNER JOIN groupespersonnes gp ON
gp.numero = sg.gpe_numero
LEFT JOIN equ_sal e ON
e.sal_numero = s.numero
LEFT JOIN equipements eq ON 
eq.numero = e.equ_numero

-- On vérifie les salles visibles pour le groupe de personne affecté à l'utilisateur connecté. 
WHERE gp.code = (SELECT code FROM groupespersonnes INNER JOIN personnes p ON p.gpe_numero = groupespersonnes.numero WHERE UPPER(:APP_USER) = UPPER(p.username))

AND :P30_PERIODE_DEBUT NOT IN (SELECT per_numero FROM enregistrements WHERE sal_numero = s.numero AND TO_CHAR(jour, 'DD.MM.RR') = :P30_DATE)
AND :P30_PERIODE_FIN NOT IN (SELECT per_numero FROM enregistrements WHERE sal_numero = s.numero AND TO_CHAR(jour, 'DD.MM.RR') = :P30_DATE)

AND e.equ_numero = regexp_substr(:P30_EQUIPEMENTS,'[^:]+')
GROUP BY s.capacite, s.nom, b.libelle, s.numero, s.code
我正在做一个设备列表,这样我就可以在一个单元中显示一个房间的所有设备。现在:P30_设备实际上是一个字符串。它获取从复选框列表Dynamic LOV中选择的设备数量,并用以下符号分隔:。我已经尝试了很多解决方案,但都没有效果。我现在正在研究PL/SQL选项


如果你有一个更简单的方法,我很乐意接受。

如果这是:P30_设备包含的内容,那么你应该:

SQL> with test (p30_equipments) as
  2    (select 'tv:balcony:shower' from dual)
  3  select regexp_substr(p30_equipments, '[^:]+', 1, level) equipment
  4  from test
  5  connect by level <= regexp_count(p30_equipments, ':') + 1;

EQUIPMENT
-----------------
tv
balcony
shower

SQL>
i、 e.适用于您的代码:

and e.equ_numero in (select regexp_substr(:p30_equipments, '[^:]+', 1, level)
                     from dual
                     connect by level <= regexp_count(:p30_equipments, ':') + 1
                    )

谢谢你的回复。P30_设备看起来像3:2:1,也可能是1:3:2,这取决于用户选择它们的顺序。这个代码似乎不能解决我的问题:3:2:1等于1:3:2或2:1:3或任何其他组合;我编写的子查询表示要从中选择的表。这有什么区别?它只是确保这些值中存在E.eq_NUMERO。如果这不是你问的,嗯,那么我误解了这个问题。它起作用了,但和之前一样。也就是说,它会找到一个设备的匹配项,并且只在列中显示该设备。我需要它来考虑所有的设备,并且能够在Listag中显示它们。如果可能的话,创建一个简单的测试用例——从最初发布的查询中,删除所有与其他表相关的不相关信息,这样我们就可以看到输入,然后向我们展示所需的输出。正如我所说:我不明白你想要什么。或者,等待其他人,希望他们能够提供帮助。我将从应用程序中制作一个测试用例:以下是表单和结果表:以下是会话变量的外观:对第一个图像下方表单的重新请求与上述请求相同,只是我删除了和e.eq_numero=regexp_substr:P30_设备,[^:]+“这样我就可以向你展示我希望如何展示它们。现在,报告必须使用复选框中的设备筛选房间。。。我一直在考虑创建一个函数,用一个字符串构建一个请求。。