查询仅根据登录表显示其组中的用户数据

时间:2016-01-18 14:37:51

标签: sql oracle

我们目前每个办公室都有应用程序,只显示那些从办公室登录数据的应用程序,现在这意味着每个办公室都有一个单独的应用程序,这意味着如果我们进行应用程序更改,我必须更新20个不同的应用程序。 / p>

登录通过APEX使用自定义身份验证方案完成,该方案仅允许个人在办公室名称与应用程序匹配时登录。

我想知道的是我如何编写sql查询,当一个人登录时,他们只能看到他们办公室的数据,所以我可以使用一个应用程序,而不是每个办公室都有一个应用程序。 / p>

这是包含登录的表的结构。

    "PKEY" NUMBER, 
    "USERNAME" VARCHAR2(50), 
    "PASSWORD" VARCHAR2(50), 
    "NAME" VARCHAR2(50), 
    "EMAIL" VARCHAR2(50), 
    "OFFICE" VARCHAR2(50), 
     CONSTRAINT "LOGINS_PK" PRIMARY KEY ("PKEY")

这是来自用于提交办公室提交信息的当前查询之一的代码。

    select "PKEY", 
"DATE_SUB",
"CLIENT",
"CANDIDATE",
"RECRUITER",
"CONTACT",
"SALES",
dbms_lob.getlength("RESUME") "RESUME",
"MIMETYPE",
"FILENAME",
"POSITION",
"AVAILABILITY",
"RATE",
"ISSUES",
"WHEN_INT",
"FEEDBACK",
"REQ_PRIORITY",
"OFFICE",
"NOTES",
"REJECT",
"INT_FB"
from "SUBS"
WHERE "OFFICE" = 'OFFICE1'
AND ("REJECT" = 'Accepted' or "REJECT" IS NULL)
AND SALES != 'House'

我想弄清楚的是如何使用登录表中的“OFFICE”字段并将其与“SUBS”表中的“OFFICE”字段进行比较,以便APEX仅向用户显示结果包含与登录表中相同的“OFFICE”标识。

示例:用户Joe Smith以jsmith身份登录,并且他在OFFICE1中,因此当他登录时,他只会在表格的OFFICE字段中看到包含OFFICE1的数据。用户Jane Brown登录到与jbrown相同的应用程序,她在OFFICE2中,因此她只能在OFFICE字段中看到OFFICE2的数据。

提前感谢您的所有帮助!

2 个答案:

答案 0 :(得分:1)

使用子查询:

select * from login where office = (
    select office from subs where login.office = subs.office
);

这将返回office数据匹配的所有登录行。我可能误解了您的初始问题,您可能需要反向查询:

select * from subs where office = (
    select office from login where subs.office = login.office
);

语法是字符不敏感的,因此我缺乏格式化,您可能希望对查询的各个部分进行处理。祝你好运!

答案 1 :(得分:0)

我知道这是一个旧的,但万一其他人需要学习如何做到这一点。

只需在页面上创建一个隐藏字段,并使用像这样的PL / SQL函数体为该字段创建计算。

  DECLARE 
  v_value VARCHAR2(4000);
  BEGIN
  SELECT NAME
  INTO v_value
  FROM LOGINS
  WHERE USERNAME = :APP_USER;
  RETURN v_value;
  END;

从你的表中使用你需要的引用(在这种情况下,招募者名称),并且只引用引用该隐藏字段的查询的AND或WHERE子句。