Temporary tables in Oracle are created in advance, so that the definition is known before you use them.
So you could do
create global temporary table temp on commit preserve rows as select ... from ...
but this is not a recommendation to do this every time you run the query. More typical usage is specify the definition once:
create global temporary table temp (
col1 ...
col2 );
and then use INSERT to populate the table as required. By default, ie, as per my latter 'create' statement above, the moment you commit, the rows are lost. If you want to retain the rows after a commit, you add the 'on commit preserve rows' as per my first example. The reason you would have to do this in a create-table-as-select scenario is that otherwise your table would be created, populated with rows, and then immediately emptied as the command completes.