如何显示基于APP_USER ID的信息?甲骨文顶点

时间:2018-07-16 17:24:21

标签: oracle oracle-apex-5.1

我有一个名为 employee 的表调用,其中具有 employee_name status 字段。状态字段包含“管理员” “工作人员”

当我以应用程序用户身份登录后(我是管理员),我希望能够看到所有员工,无论是管理员还是员工。但是,当我以应用程序用户身份登录(并且属于人员类别)时,我只想查看自己的信息。

我正在使用

SELECT *
FROM employee
 WHERE UPPER(employee_name) = UPPER(:APP_USER) 
    OR status = 'staff'

但是它没有给我想要的结果。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我建议您创建一个函数来显示APP_USER是否(或不是)管理员。然后在SELECT语句中使用它。

这是一个例子:

SQL> create table employee
  2    (employee_name varchar2(20),
  3     status        varchar2(20));

Table created.

SQL> insert into employee
  2    select 'LITTLE', 'staff' from dual union all
  3    select 'FOOT'  , 'admin' from dual union all
  4    select 'RAWLE' , 'staff' from dual;

3 rows created.

SQL> create or replace function f_admin_01 (par_app_user in varchar2)
  2    return number
  3  is
  4    -- RETURN 1 if par_app_user is 'admin'
  5    --        0 if it is not
  6    retval number;
  7  begin
  8    select case when status = 'admin' then 1
  9                else 0
 10           end
 11      into retval
 12      from employee
 13      where employee_name = par_app_user;
 14
 15    return retval;
 16  end;
 17  /

Function created.

测试(请注意,在Apex中,您显然不必声明变量或为其分配值。而且,:APP_USER始终是大写的,因此应用UPPER毫无意义。功能)

SQL> var app_user varchar2(20)
SQL> exec :app_user := 'LITTLE'

PL/SQL procedure successfully completed.

SQL> select *
  2  from employee
  3  where employee_name = case when f_admin_01(:APP_USER) = 1 then employee_name
  4                             else :APP_USER
  5                        end;

EMPLOYEE_NAME        STATUS
-------------------- --------------------
LITTLE               staff

SQL> exec :app_user := 'FOOT'

PL/SQL procedure successfully completed.

SQL> select *
  2  from employee
  3  where employee_name = case when f_admin_01(:APP_USER) = 1 then employee_name
  4                             else :APP_USER
  5                        end;

EMPLOYEE_NAME        STATUS
-------------------- --------------------
LITTLE               staff
FOOT                 admin
RAWLE                staff

SQL>