Oracle Apex에서 다음과 같은 양식으로 보고서를 만들었습니다.
- 일반 직원이 작업 표 응용 프로그램에 로그인하면 보고서에 직원 레코드 만 표시되지만
- 관리자가 로그인하면 보고서에 관리자 기록과 함께 근무하는 모든 직원이 표시됩니다.
이것을 달성하는 방법? 누구든지 나를 안내 할 수 있습니까?
Oracle Apex에서 다음과 같은 양식으로 보고서를 만들었습니다.
이것을 달성하는 방법? 누구든지 나를 안내 할 수 있습니까?
"일반 직원"과 "관리자"를 어떻게 구별합니까? 그렇게 말하는 테이블이 있어야합니다. 주석으로 게시 한 코드 (정말, 왜 그렇게 했습니까?이 읽을 수없는 혼란 대신 질문을 편집하고 올바른 형식의 코드를 게시 할 수 없습니까?)는 고유 식별자가 사용자 이름으로도 사용되는 누군가의 전자 메일 주소임을 암시합니다. Apex에 로그인 할 때 해당 테이블에는 [전자 메일 역할] 쌍이 있습니다. 예 :
SQL> desc apex_roles
Name Null? Type
----------------------------------------- -------- ------------------------
E_MAIL VARCHAR2(15)
ROLE CHAR(1)
SQL> select * from apex_roles;
E_MAIL R
--------------- -
lf@gmail.com M --> M = manager
kamal@yahoo.com E
SQL>
이제 누군가가 관리자인지 여부를 알려주는 함수를 만듭니다. 1
을 반환하고 그렇지 않으면 0
을 반환합니다 (Boolean이 아닌 이유는 무엇입니까? select
문에서 사용할 수 없습니다).
SQL> create or replace function f_is_manager(par_app_user in varchar2)
2 return number
3 is
4 retval number := 0;
5 begin
6 select 1
7 into retval
8 from apex_roles
9 where e_mail = par_app_user
10 and role = 'M';
11
12 return retval;
13 exception
14 when no_data_found then
15 -- user isn't a manager
16 return retval;
17 end;
18 /
Function created.
SQL>
이제 보고서의 where
절에서 해당 함수를 사용하십시오. 표시하려는 데이터가 포함 된 테이블이라고 가정합니다.
SQL> select * from my_data;
E_MAIL JOB SAL
-------------------- --------- ----------
CLARK@gmail.com MANAGER 2450
KING@gmail.com PRESIDENT 5000
MILLER@gmail.com CLERK 1300
lf@gmail.com MANAGER 2200 --> manager in APEX_ROLES table
kamal@yahoo.com CLERK 1500
kamal이 보고서를 실행하면 어떻게 되나요? 해당 사용자는 자신의 데이터 만 볼 수 있습니다.
SQL> select job, sal
2 from my_data
3 where e_mail = case when f_is_manager('&&APP_USER') = 1 then e_mail
4 else '&&APP_USER'
5 end;
Enter value for app_user: kamal@yahoo.com
JOB SAL
--------- ----------
CLERK 1500
그러나 관리자가 실행하면 모든 사람의 데이터를 볼 수 있습니다.
SQL> select job, sal
2 from my_data
3 where e_mail = case when f_is_manager('&&APP_USER') = 1 then e_mail
4 else '&&APP_USER'
5 end;
Enter value for app_user: lf@gmail.com
JOB SAL
--------- ----------
MANAGER 2450
PRESIDENT 5000
CLERK 1300
MANAGER 2200
CLERK 1500
SQL>
Apex이므로 실제로
select job, sal
from my_data
where e_mail = case when f_is_manager(:APP_USER) = 1 then e_mail
else ':APP_USER'
end;