我有一个名为 employee 的表调用,其中具有 employee_name 和 status 字段。状态字段包含“管理员” 和“工作人员” 。
当我以应用程序用户身份登录后(我是管理员),我希望能够看到所有员工,无论是管理员还是员工。但是,当我以应用程序用户身份登录(并且属于人员类别)时,我只想查看自己的信息。
我正在使用
SELECT *
FROM employee
WHERE UPPER(employee_name) = UPPER(:APP_USER)
OR status = 'staff'
但是它没有给我想要的结果。有人可以帮我吗?
答案 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>