Scenario, in a single connection I do this:
              
              1. Start transaction.
              2. Create table.
              3. Commit.
              4. Start transaction.
              5. Insert rows.
              6. Select using join with other tables.
              7. Commit.
              8. Start transaction.
              9. Drop table.
               ---> ERROR: Object is in use.
              
              I KNOW the table has been accessed only using this
              connection and the
              transactions listed above. So why is it in use at step 9
              and how can I avoid
              it?
              
              I need this to temporarily store some data to select data
              for a report, and
              the required set of columns in the temp table varies, so I
              cannot use a GTT
              since it has persistent DDL. Is there any other way to
              achieve that, i.e. a
              local temporary table? For pref I would like to have it
              local to the
              insert/select transaction...
              
              Waiting a while before step 8-9 (and subsequent commit) is
              not an option
              because this is done in application code that runs all the
              way while the
              user is waiting for the report to pop up - I do need to
              drop it right away.
              (Unless I would always just leave it there and instead
              drop it before step 1
              next time I run this kind of report, but it would annoy me
              to have a useless
              temp table lying around.)
              
              Thanks,
              Kjell
              
              What sort of transaction are you using? The select may be
              retaining.. Do you
              close the query?