Here's a way using a CTE (Common Table Expression) with a regex that handles NULL list elements (or explicitly ignore them in the query, SUM ignores them at any rate):
SQL> -- First build the base table.
SQL> with tbl(stk, cst) as (
select 'ABCDE', ',258.40,299.50' from dual union
select 'FGHIJ', '100.50,70.50,,,95.30' from dual
),
-- Turn the list into a table using the comma as the delimiter. Think of it
-- like a temp table in memory. This regex format handles NULL list elements.
example_tbl(stock, cost) as (
select stk, regexp_substr(cst, '(.*?)(,|$)', 1, level, NULL, 1)
from tbl
connect by regexp_substr(cst, '(.*?)(,|$)', 1, level) is not null
group by stk, level, cst
)
-- select * from example_tbl;
SELECT stock, to_char(sum(cost), '9990.99') Total
from example_tbl
group by stock;
STOCK TOTAL
----- --------
ABCDE 557.90
FGHIJ 266.30
SQL>