It is sometimes hard to know where a profile option is set. A user might have a profile option set, an application, responsibility, and these might result in unexpected results. The following prompts for the profile name that a user sees. You could also query for the internal profile code instead by using the column profile_option_name instead.
SELECT b.user_profile_option_name "Long Name",
a.profile_option_name
"Short Name",
DECODE (
TO_CHAR (c.level_id),
'10001', 'Site',
'10002', 'Application',
'10003', 'Responsibility',
'10004', 'User',
'Unknown'
) "Level",
DECODE (
TO_CHAR (c.level_id),
'10001', 'Site',
'10002', NVL (h.application_short_name, TO_CHAR (c.level_value)),
'10003', NVL (g.responsibility_name, TO_CHAR (c.level_value)),
'10004', NVL (e.user_name, TO_CHAR (c.level_value)),
'Unknown'
) "Level Value",
c.profile_option_value "Profile Value",
c.profile_option_id
"Profile ID",
TO_CHAR (c.last_update_date, 'DD-MON-YYYY HH24:MI') "Updated Date",
NVL (d.user_name, TO_CHAR (c.last_updated_by))
"Updated By"
FROM apps.fnd_profile_options a,
apps.fnd_profile_options_vl b,
apps.fnd_profile_option_values c,
apps.fnd_user d,
apps.fnd_user e,
apps.fnd_responsibility_vl g,
apps.fnd_application h
WHERE b.user_profile_option_name LIKE '&ProfileName'
AND a.profile_option_name = b.profile_option_name
AND a.profile_option_id = c.profile_option_id
AND a.application_id = c.application_id
AND c.last_updated_by = d.user_id(+)
AND c.level_value = e.user_id(+)
AND c.level_value = g.responsibility_id(+)
AND c.level_value = h.application_id(+)
ORDER BY b.user_profile_option_name,
C.level_id,
DECODE (
TO_CHAR (C.level_id),
'10001', 'Site',
'10002', NVL (h.application_short_name, TO_CHAR (C.level_value)),
'10003', NVL (g.responsibility_name, TO_CHAR (C.level_value)),
'10004', NVL (e.user_name, TO_CHAR (C.level_value)),
'Unknown'
);