--Function Security Policy
SELECT
RL.ROLE_NAME AS ROLE_NAME,
R.CODE AS ROLE_CODE,
RT.ROLE_TYPE_NAME AS ROLE_TYPE,
PL.CODE AS PRIVILEGE_CODE,
PL.NAME AS PRIVILEGE_NAME,
PM.CREATED_BY,
(SELECT L.FIRST_NAME || ' ' || L.LAST_NAME FROM PER_LDAP_USERS L WHERE L.USERNAME =
PM.CREATED_BY AND L.USER_GUID = UA.USER_GUID
AND L.CREATION_DATE = (SELECT MAX(L1.CREATION_DATE) FROM PER_LDAP_USERS L1 WHERE
L1.USERNAME = L.USERNAME AND L1.USER_GUID = L.USER_GUID)) AS CREATED_BY_NAME,
TO_CHAR(PM.CREATION_DATE, 'MM/DD/YYYY hh:mm AM') AS CREATION_DATE_UTC,
PM.LAST_UPDATED_BY,
(SELECT L.FIRST_NAME || ' ' || L.LAST_NAME FROM PER_LDAP_USERS L WHERE L.USERNAME =
PM.LAST_UPDATED_BY AND L.USER_GUID = UB.USER_GUID
AND L.CREATION_DATE = (SELECT MAX(L1.CREATION_DATE) FROM PER_LDAP_USERS L1 WHERE
L1.USERNAME = L.USERNAME AND L1.USER_GUID = L.USER_GUID)) AS LAST_UPDATED_BY_NAME,
TO_CHAR(PM.LAST_UPDATE_DATE, 'MM/DD/YYYY hh:mm AM') AS LAST_UPDATE_DATE_UTC,
CASE WHEN TRUNC(PM.LAST_UPDATE_DATE) = TRUNC(PM.CREATION_DATE)
THEN 'UPDATE(ADD)'
WHEN (TRUNC(PM.LAST_UPDATE_DATE) <> TRUNC(PM.CREATION_DATE) AND
NVL(PM.EFFECTIVE_END_DATE,TO_DATE('4712-12-31')) = TO_DATE('4712-12-31'))
THEN 'UPDATE(NEW)'
ELSE 'UPDATE(OLD)'
END AS ACTION,
TO_CHAR(PM.EFFECTIVE_START_DATE, 'MM/DD/YYYY') AS EFFECTIVE_START_DATE,
TO_CHAR(PM.EFFECTIVE_END_DATE, 'MM/DD/YYYY') AS EFFECTIVE_END_DATE
FROM ASE_PRIV_ROLE_MBR PM, ASE_ROLE_TL RL, ASE_ROLE_B R, ASE_PRIVILEGE_VL PL,
PER_USERS UA, PER_USERS UB, ASE_ROLE_TYPE_VL RT
WHERE PM.ROLE_ID = RL.ROLE_ID AND PM.ROLE_ID = R.ROLE_ID
AND RL.LANGUAGE = 'US'
AND PL.LANGUAGE = 'US'
AND UA.USERNAME = PM.CREATED_BY
AND UB.USERNAME = PM.LAST_UPDATED_BY
AND UA.START_DATE = (SELECT MAX(UA1.START_DATE) FROM PER_USERS UA1 WHERE
UA1.USER_ID = UA.USER_ID)
AND UB.START_DATE = (SELECT MAX(UB1.START_DATE) FROM PER_USERS UB1 WHERE
UB1.USER_ID = UB.USER_ID)
AND R.EFFECTIVE_START_DATE = (SELECT MAX(R1.EFFECTIVE_START_DATE) FROM ASE_ROLE_B
R1 WHERE R1.ROLE_ID = R.ROLE_ID)
AND PL.EFFECTIVE_START_DATE = (SELECT MAX(PL1.EFFECTIVE_START_DATE) FROM
ASE_PRIVILEGE_VL PL1 WHERE PL1.PRIVILEGE_ID = PL.PRIVILEGE_ID)
AND PM.PRIVILEGE_ID = PL.PRIVILEGE_ID
AND RT.LANGUAGE = 'US'
AND RT.ROLE_TYPE_CODE = R.ROLE_TYPE_CODE
AND ((PM.CREATION_DATE BETWEEN :PARAM_FROM_DATE AND :PARAM_TO_DATE) OR
(PM.LAST_UPDATE_DATE BETWEEN :PARAM_FROM_DATE AND :PARAM_TO_DATE))
AND ((PM.CREATED_BY IN (:PARAM_USERS) OR LEAST (:PARAM_USERS) IS NULL) OR
(PM.LAST_UPDATED_BY IN (:PARAM_USERS) OR LEAST (:PARAM_USERS) IS NULL))
AND ((RL.ROLE_NAME IN (:PARAM_ROLENAME) OR LEAST (:PARAM_ROLENAME) IS NULL))
ORDER BY PM.LAST_UPDATE_DATE DESC