I'd say the table is badly structured - there should be a row for each domain. That is going to make a solution very difficult for a beginner.
You need a piece of sql that will create a row for each domain stored in the ; separated list.
so dublin.ie;montreal.com;paris.com;bristol.uk
becomes:-
dublin.ie
montreal.com
paris.com
bristol.uk
and then bind the rows that don't have .com back into a single row, to get
dublin.ie; bristol.uk
I had a similar issue - I has a field that contained comma separated country codes.
The report user I was working for wanted country names. I had a COUNTRY table that contained Country Code and Country Name, but the comma separated list wouldn't join to it, as it has "GB,FR,IT" where the country table has "GB" for "Great Britain" and so on.
I solved this by creating a row (in memory) for each of the comma separated values, joining these rows to the COUNTRY table, returning the names of the countries, and then bound the country name back into a single line, like this:-
"Great Britain, France, Italy".
Here's the code I used - it's not for beginners, though. You might want to try using REPLACE and INSTR and SUBSTR, but you'll need to know in advance how many entries each field contains, otherwise you'll probably need to work within loops, using PLSQL.
If i were you, I'd ask the DBA (if it is possible) to structure the data properly so that the fields contain atomic values, not arrays of values.
SELECT ROW_SPLIT.CONTRACT_ID,
WM_CONCAT(ROW_SPLIT.COUNTRY_NAME) AS COUNTRY_LIST
FROM
(SELECT PQ.ID AS CONTRACT_ID,
PQ.COUNTRY_CODE,
COUT.TEXT AS COUNTRY_NAME
FROM
(SELECT ID,
extract(value(d), '//row/text()').getStringVal() AS COUNTRY_CODE
FROM
(SELECT ID,
XMLTYPE('<rows><row>'
|| REPLACE(EXCLUDED_NATIONALITIES, ',', '</row><row>')
|| '</row></rows>') AS xmlval
FROM PROPERTY_CONTRACT
) x,
TABLE(xmlsequence(extract(x.xmlval, '/rows/row'))) d
) PQ
JOIN COUNTRY C
ON C.CODE = PQ.COUNTRY_CODE
LEFT OUTER JOIN TEXT COUT
ON C.CODE = COUT.CODE
AND COUT.CATEGORY = 'COUNTRY'
AND COUT.LANGUAGE = 'en'
ORDER BY PQ.ID,
COUT.TEXT
) ROW_SPLIT
GROUP BY ROW_SPLIT.CONTRACT_ID;