| SQL programming / SQL portability | |
Syntax for temporary table creation is not unique across all database engines.
Not all database servers support temporary tables. The engines supporting this feature often provide it with a specific table creation statement:
| Database Server Type | Temp table creation syntax | Local to SQL session? | 
|---|---|---|
| Genero db | CREATE TEMP TABLE tablename ( column-defs ) SELECT ... INTO TEMP tablename  | 
Yes | 
| IBM® DB2® UDB | DECLARE GLOBAL TEMPORARY TABLE tablename ( column-defs ) DECLARE GLOBAL TEMPORARY TABLE tablename AS ( SELECT ... )  | 
Yes | 
| IBM Informix® | CREATE TEMP TABLE tablename ( column-defs ) SELECT ... INTO TEMP tablename  | 
Yes | 
| Microsoft™ SQL Server | CREATE TABLE #tablename ( column-defs ) SELECT select-list INTO #tablename FROM ...  | 
Yes | 
| MySQL | CREATE TEMPORARY TABLE tablename ( column-defs ) CREATE TEMPORARY TABLE tablename LIKE other-table  | 
Yes | 
| Oracle Database Server |  CREATE GLOBAL TEMPORARY TABLE tablename ( column-defs ) CREATE GLOBAL TEMPORARY TABLE tablename AS SELECT ...  | 
No: only data is local to session | 
| PostgreSQL | CREATE TEMP TABLE tablename ( column-defs ) SELECT select-list INTO TEMP tablename FROM ...  | 
Yes | 
| Sybase ASE | CREATE TABLE #tablename ( column-defs ) SELECT select-list INTO #tablename FROM ...  | 
Yes | 
| SQLite | 
       CREATE TEMP TABLE tablename ( column-defs )  | 
      Yes | 
Some databases even have a different behavior when using temporary tables. For example, ORACLE 9i supports a kind of temporary table, but it must be created as a permanent table. The table is not specific to an SQL session: it is shared by all processes - only the data is local to a database session.
You must review the programs using temporary tables, and adapt the code to use database-specific temporary tables.