<p>I'm familiar with Sybase / SQL server, where I can create a temp. table like this: </p>

<pre><code>SELECT * 
INTO   #temp
FROM   tab1 , 
       tab2 
WHERE  tab1.key = tab2.fkey

SELECT * 
FROM   #temp 
WHERE  field1 = 'value' 
</code></pre>

<p>#temp only exists for the duration of this session, and can only be seen by me.  </p>

<p>I would like to do a similar thing in Oracle, but I'm reading about "global temporary tables", which don't sound like the same thing.  </p>

<p>How can I do the same thing in Oracle as I'm doing in Sybase? </p>

<p>Thanks :)</p>

I believe
global temporary
tables are the same. They will give you private access to a temporary table that dies when the session ends:
The data in a global temporary table is private, such that data inserted by a session can only be accessed by that session. The session-specific rows in a global temporary table can be preserved for the whole session, or just for the current transaction. The ON COMMIT DELETE ROWS clause indicates that the data should be deleted at the end of the transaction.
After reading the question a few more times I believe it the main difference, and maybe your issue is that the temporary tables persist between sessions. So the exact equivalent is not possible as you would imagine in Oracle it would be something like:
```
```
CREATE GLOBAL TEMPORARY TABLE my_temp_table ON COMMIT DELETE ROWS select * from other table;
```
```
That table will live until it is dropped even through sessions although the data in it does not. Instead you would need to create the temporary table in advance.