We have Oracle table of donations where we keep information of each transaction that people make for donations. We only capture First, last and middle name of person with address (Street1, street2, city, state, zip). We need to develop a function or regular expression that should identify and group same person's all transactions even person has multiple variations in name and address columns. System should group all the transactions of one person and create the golden/best record of that person and store in a separate table with unique "person_id". If person files another transaction next time, system should compare it with existing golden/best record and get the person_id from that table and if person does not exist in table (filing first time) then assign new person id to that person.
I need this in Oracle SQL and PL/SQL No tools.