To
create a table named test with column col1 type varchar2 length 10, col2 type
number. col3 type clob we can use CREATE TABLE statement as,
CREATE
TABLE TEST(col1 VARCHAR2(10), col2 NUMBER, col3 CLOB);
Now
if I insert data into the table the data is visible and accessible to all
users. In many cases it is needed the data inside a table will be reside
temporarily. In that case we can use temporary tables. Temporary tables are
useful in applications where a result set is to be buffered. To create temporary
table we have to issue CREATE GLOBAL TEMPORARY clause.
Temporary
table can be of two types based on ON COMMIT clause settings.
1)ON
COMMIT DELETE ROWS specifies temporary table would be transaction specific.
Data persist within table up to transaction ending time. If you end the
transaction the database truncates the table (delete all rows). Suppose if you
issue commit or run ddl then data inside the temporary table will be lost. It
is by default option.
Example:
(i)This
statement creates a temporary table that is transaction specific:
CREATE
GLOBAL TEMPORARY TABLE test_temp(col1 number, col2 number) ON COMMIT DELETE
ROWS;
Table
created.
(ii)Insert
row in to the temporary table.
insert
into test_temp values(3,7);
1
row created.
(iii)Look
at the data in the table.
select
* from test_temp;
COL1
COL2
----------
----------
3
7
(iv)Issue
Commit.
commit;
Commit
complete.
(v)Now
look at the data in the temporary table. As I created transaction specific
temporary table(on commit delete rows) so data is lost after commit.
SQL>
select * from test_temp;
no
rows selected
2)ON
COMMIT PRESERVE ROWS specifies temporary table would be session specific. Data
persist within table up to session ending time. If you end the session the
database truncates the table (delete all rows). Suppose you type exit in
SQL*Plus then data inside the temporary table will be lost.
Example of Session Specific Temporary Tables:
1)Create
Session Specific Temporary Table test_temp2.
CREATE
GLOBAL TEMPORARY TABLE test_temp2 (col1 number, col2 number)
ON
COMMIT PRESERVE ROWS;
(ii)Insert
data into it and look at data both before commit and after commit.
insert
into test_temp2 values(3,7);
1
row created.
SQL>select * from test_temp2;
COL1
COL2
----------
----------
3
7
(iii) commit;
Commit
Complete
(iv)select
* from test_temp2;
COL1
COL2
----------
----------
3
7
(iv)End the Session.
exit;
Disconnected from
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining
options
(v)Connect in a new
session and look at data again.
$ sqlplus
apps/apps@vis.world
Connected to:
Oracle Database 10g
Enterprise Edition Release 10.2.0.3.0 – Production
With the Partitioning, OLAP and Data Mining
options
SQL> select *
from test_temp2;
no rows selected
This is how Global Temporary Tables are used.
Feature of Temporary Table
1.Indexes can be created on
temporary tables. They are also temporary and the data in the index has the
same session or transaction scope as the data in the underlying table.
2.Unlike permanent
tables, temporary tables and their indexes do not automatically allocate a
segment when they are created. Instead, segments are allocated when the first
INSERT (or CREATE TABLE AS SELECT) is performed. This means that if a SELECT,
UPDATE, or DELETE is performed before the first INSERT, the table appears to be
empty.
3.DDL operations
(except TRUNCATE) are allowed on an existing temporary table only if no session
is currently bound to that temporary table.
4.If you rollback a
transaction, the data you entered is lost, although the table
definition persists.
5.A
transaction-specific temporary table allows only one transaction at a time. If
there are several autonomous transactions in a single transaction scope, each
autonomous transaction can use the table only as soon as the previous one commits.
6.Because the data in
a temporary table is, by definition, temporary, backup and recovery of
temporary table data is not available in the event of a system failure.
7.It is good to know
about that temporary table itself is not temporary, the data within it is temporary.
Restriction of Temporary Table
1.Temporary tables
cannot be partitioned, clustered, or
index organized.
2.You cannot
specify any foreign key constraints
on temporary tables.
3.Temporary tables cannot contain columns of nested table.
4.You cannot specify
the following clauses of the LOB_storage_clause: TABLESPACE, storage_clause, or
logging_clause.
5.Parallel DML and parallel queries are not supported for temporary
tables. Parallel hints are ignored. Specification of the parallel_clause
returns an error.
6.You cannot specify
the segment_attributes_clause, nested_table_col_properties, or parallel_clause.
7.Distributed transactions are
not supported for temporary tables.