You should do this all in one query.
Why?
A couple of reasons.
Firstly it's likely to perform better. The database only has to execute one query, so there's less to parse. And the optimizer may be able to come up with transformations not possible if you bury the SQL in a function. And there's no SQL<>PL/SQL context switching.
The second is more insidious but perhaps more important:
You can get unexpected results!
Oracle statements are read consistent to the point in time they start. So you have SQL that starts at T1. This calls PL/SQL which runs another SQL statement. This second statement starts at some time
after the original, Tn. So it can have a different view of the data than the original query.
This can lead to incorrect results.
You can read more about this problem at:
https://blogs.oracle.com/sql/entry/the_problem_with_sql_calling There's no difference in performance between a package and stand-alone procedure.