There's lack of information about your tables to expand on that.
Post definition of tables, constraints ...

Why do you count rows in REF_COST_CENTRE table when UPDATING a row?
I guess that's useless and even causing the ORA-04091 error:

IF lv_numrows > 0 THEN
SELECT COUNT(*) INTO lv_numrowsmst
FROM REF_COST_CENTRE
WHERE COST_CENTRE_CODE
= :OLD.COST_CENTRE_CODE
AND COUNTRYCODE = :OLD.COUNTRYCODE;