Before that, you must know about the difference between the two. VTT are session scoped whereas GTT is also a session scoped but its DDL can be accessed by other sessions because it is stored in data dictionary.
GTT takes up space from temporary space where as VTT takes up space from spool.
GTT survive TD system restarts where as VTT does not.
GTT allows index to be created where as VTT does not.
In a single session 2000 GTT can be materialized where as in case of VTT the count is only 1000.
GTT allows some constraints to be created on where as VTT does not.
Based on these differences, you can decide which one fits in which scenario.
You would tend to use volatile tables in batch scripts where you are building some form of work or summary table for use only in that script. Because you can turn logging off for the table, it is much faster if you insert/ select and then go on to add more records or du updates or deletes. It also simplifies restarting after a failure - there is nothing to clean up for a restart. GTT are mainly used in very short decision support type queries - you can extract one or a few records and use this to determine further information. For instance, you can find all accounts for a customer, put this in a GTT and then get all the transactions for those accounts.
In the TD document it is given. Also I see that it is justifiable since, GTT can be shared across multiple users. So a lookup may be slightly more time-consuming than VT. Anyone having a better explanation?