SELECT M.MGR_ID 아이디, M.MGR_NAME 성명,
M.MGR_DEP 소속부서, M.MGR_TELNO 전화번호,
CASE WHEN SUBSTR(U.URL_ID,1,4) = 'IR01' THEN '일반가상'
WHEN SUBSTR(U.URL_ID,1,4) = 'IR12' THEN '유동가상'
WHEN SUBSTR(U.URL_ID,1,4) = 'IR09' THEN '카드단말'
WHEN SUBSTR(U.URL_ID,1,4) = 'IR03' THEN '전자납부'
WHEN SUBSTR(U.URL_ID,1,4) = 'IR04' THEN '수납센터'
WHEN SUBSTR(U.URL_ID,1,4) = 'IR08' THEN '실적'
WHEN SUBSTR(U.URL_ID,1,5) = 'IR025' THEN '과세'
WHEN SUBSTR(U.URL_ID,1,5) = 'IR027' THEN '과오납'
WHEN SUBSTR(U.URL_ID,1,5) = 'IR100' THEN '과표'
WHEN SUBSTR(U.URL_ID,1,5) = 'IR105' THEN '기타'
END AS 화면대분류,
U.URL_NAME 화면명,
S.SELECT_YN 조회, S.INSERT_YN 신규,
S.UPDATE_YN 수정, S.DELETE_YN 삭제, PRINT_YN 출력
FROM MANAGER_URL_TAB U,
MANAGER_SECURITY_TAB S,
MANAGER_TAB M
WHERE U.URL_ID = S.URL_ID(+)
AND M.MGR_ID = S.MGR_ID
AND M.MGR_ORG = '000'
AND ((U.URL_ID NOT LIKE 'IR05%') AND
(U.URL_ID NOT LIKE 'IR06%') AND
(U.URL_ID NOT LIKE 'IR07%') AND
(U.URL_ID NOT IN ('IR039910')) AND
(U.URL_ID NOT LIKE 'IR08%' OR
U.URL_ID IN ('IR080310', 'IR080320')))
ORDER BY M.MGR_NAME, U.URL_SORT
위와 같은 쿼리가 있습니다.
그런데 보시는 바와 같이 MANAGER_TAB와 MANAGER_SECURITY_TAB는 컬럼
MGR_ID로 조인이 가능합니다. 그리고 MANAGER_SECURITY_TAB와 MANAGER_URL_TAB
는 URL_ID로 조인이 가능하고요. 문제는 저렇게 하면 SELECT_YN, DELETE_YN 등 조회나 삭제 수정 등등이
Y인 경우만 출력이 됩니다.
예를 들어 만일 자료에 MANAGER_TAB에 볼우물 이라는 사람이 있고
MANAGER_SECURITY_TAB에 화면 아이디가 0000과 1111이 있다고 하고
MANAGER_URL_TAB에는 0000, 11111, 2222이 있다고 치면
제가 뿌리고 싶은 화면이라면
이름 | 화면 | 조회 | 삭제
볼우물 | 0000 | Y | Y
볼우물 | 1111 | Y | Y
볼우물 | 2222 | |
이렇게 뿌리고 싶은데요..
조회나 삭제가 Y인것까지만 나오고 이게 널이면 나오질 않네요..
MANAGER_TAB에는 사용자 정보,
MANAGER_SECURITY_TAB에는 사용자에 따른 사용화면의 권한이 있습니다.
MANAGER_URL_TAB에는 모든 사용화면이 들어있구요.
쿼리에서 보시면 AND 절에 MGR_ORG = '000'으로 되어있는데 이것은
소속기관입니다.
즉 한 소속 기관에 속한 사용자들과 함께 모든 화면을 뿌려주고 거기에 따른 조회나 삭제 등을 보여줘야 하는거죠.
그리고 다른 AND 절에 보시면 보여주지 말아야 할 화면도 있습니다.
그 화면을 제외한 모든 화면과 조회 삭제 권한을 보여줄 수 없을까요? 물론 사용자 정보도 함께요..
공무원이 급하게 해달라는데... 제가 아직 오라클은 잘몰라서
쿼리를 짜긴 짰는데 저게 한계이네요..
고수님들의 많은 조언 부탁합니다.