Oracle-Apex分拣机

时间:2020-05-18 17:32:07

标签: sql oracle plsql oracle-apex

我创建了“使用往返班车进行多对多关系” 当我从LOV中选择ROLE_NAME时,我想在右侧看到所选角色的特权,而在左侧看到该角色没有的特权。

相反,我看到右侧没有该角色的特权,而左侧则是该角色的特权。

2 个答案:

答案 0 :(得分:3)

有多种原因导致此现象。

  • 由于切换了值列表“ SQL Query”和“ Source”,因此您看到的项目在错误的一侧。 SQL查询应返回所有可能的值。 “源”是所选值。
  • 航天飞机上有一个级联的LOV。这不是级联爱好者所做的。级联的lov控制选择的可用值(例如,如果lov 1是REGIONS,而lov 2是国家/地区,则您的级联lov会将lov 2限制为lov 1中该区域的国家/地区-在值列表中并非如此您想更改所选角色的所选值。因此您需要对lov进行动态操作以刷新穿梭值,而不是级联lov。
  • 存在一个提交页面的现有动态操作。不需要。相反,您可以将动态操作与操作“设置值”一起使用,以将穿梭值设置为所选角色的值。
  • 您的数据库操作仅执行插入操作。这意味着,如果您为已经拥有特权的角色再次单击“保存”,则会创建重复的值。

我已经修复了工作区中名为“ shuttle-test-KOEN”的应用程序中的所有问题(除了最后一个问题,即页面处理)

还有一件事:顶点在页面项目中的命名约定是 P#page_number#_ITEMNAME。我强烈建议您坚持这一点。

Rgds 科恩

答案 1 :(得分:1)

您正在选择未分配给LOV项目(角色)的特权。因此,它在右侧显示了未分配的角色。

如果从查询中删除NOT,则它将在右侧显示分配的角色,在左侧显示分配的角色

SELECT priv_id
FROM privileges s1
WHERE NOT EXISTS (SELECT 1
                  FROM roles s2
                  WHERE s2.fk_priv_id = s1.priv_id
                  AND s2.fk_role_id = :P_4_LOV
                  );

应该是

SELECT priv_id
    FROM privileges s1
    WHERE EXISTS (SELECT 1
                      FROM roles s2
                      WHERE s2.fk_priv_id = s1.priv_id
                      AND s2.fk_role_id = :P_4_LOV
                      );