Looks to me like this is your problem query (26 out of 30 sec)
SELECT PT_CODE,BUS_UNIT,TOP_BRASS_YN,ROOM_CLASS_CODE,WARD_CODE,
ADMIT_STATUS_FLAG,PT_ADMIT_DATE,PT_ADMIT_TIME,MD_CODE,REQUEST_NO,REG_NO,
INP_REG_NO,MOTHER_PT_CODE,CRE_NOTES,PT_DIAGNOSIS_NOTE,
TMP_CLINIC_DISCHARGE_DATE,ROOM_CODE,BED_CODE,ROWID
FROM
A_INP_PATIENTS_ADMT WHERE bus_unit = :1 and admit_status_flag = 'C' and
nvl(clinical_discharge_yn,'N') not in ('Y','C') and (ward_code = :2 or :3 =
'007') order by room_code
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.03 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 4 0.14 26.61 2306 47604 0 33
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6 0.14 26.64 2306 47604 0 33
You could try creating a function-based index on
A_INP_PATIENTS_ADMT(bus_unit, admit_status_flag, nvl(clinical_discharge_yn,'N'), ward_code)
Ross Leishman