잡동사니

반응형

질문

Oracle Apex에서 다음과 같은 양식으로 보고서를 만들었습니다.

  • 일반 직원이 작업 표 응용 프로그램에 로그인하면 보고서에 직원 레코드 만 표시되지만
  • 관리자가 로그인하면 보고서에 관리자 기록과 함께 근무하는 모든 직원이 표시됩니다.

이것을 달성하는 방법? 누구든지 나를 안내 할 수 있습니까?


답변1

"일반 직원"과 "관리자"를 어떻게 구별합니까? 그렇게 말하는 테이블이 있어야합니다. 주석으로 게시 한 코드 (정말, 왜 그렇게 했습니까?이 읽을 수없는 혼란 대신 질문을 편집하고 올바른 형식의 코드를 게시 할 수 없습니까?)는 고유 식별자가 사용자 이름으로도 사용되는 누군가의 전자 메일 주소임을 암시합니다. 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;


 

 

 

 

출처 : https://stackoverflow.com/questions/62066764/displaying-employee-record-or-manager-record-along-with-his-employees-in-oracle

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band