select a.tablespace_name,
round(a.total_size) "total_size(MB)",
round(a.total_size) - round(b.free_size) "used_size(MB)",
round(b.free_size) "free_size(MB)",
round(b.free_size/total_size*100)||'%'free_rate
from (select tablespace_name,sum(bytes)/1024/1024 total_size
from dba_data_files
group by tablespace_name)a,
(select tablespace_name,sum(bytes)/1024/1024 free_size
from dba_free_space
group by tablespace_name)b
where a.tablespace_name = b.tablespace_name;