SELECT statement can also be dynamic,
but you cannot use SELECT in a PL/SQL procedure in the same way as in a gui tool like SqlPlus, Toad or SQL-Developer.
Interactive GUI tools accept ordinary SQL syntax like
SELECT xx FROM yyy, they execute queries entered interactively by the user
and display results of queries on the screen to the user.
But PL/SQL is not a gui tool, it doesn't display results of the query on the screen and it doesn't accept simple SELECT syntax.
You must use
SELECT column_list INTO variable_list syntax to collect query results into PL/SQL variables (if your query returns only one row)
or
SELECT column_list BULK COLLECT INTO collection_variable_list to collect many values into collections,
or open a cursor (cursors can be used also with dynamic SQL) and fetch row by row from returned resultset.
Here is a documentation with many examples how to use both static and dynamic SQL in PL/SQL:
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/static.htm#BABGEDAE
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/dynamic.htm#CACDDACH
I guess that you are looking for something like this: