首先是创建临时表的语法:
CREATE GLOBAL TEMPORARY TABLE table
"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}]
[, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"
ON COMMIT {DELETE | PRESERVE } ROWS ;
在Oracle中,可以创建以下两种临时表:
1) 会话特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT PRESERVE ROWS;
2) 事务特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是如果insert 一条记录然后用别的连接登上去select,记录是空的。
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
Oracle中的临时表有两种一种是事务级别的临时表它在事务结束的时候自动清空记录,另一种是会话级的它在我们访问数据库是的一个会话结束后自动的清空。关于临时表多用户并行不是问题,一个会话从来不会阻止另一个会话使用临时表。即使“锁定”临时表,一个会话也不会阻止其他会话使用它们的临时表。
例子如:
会话级:
CREATE GLOBAL TEMPORARY TABLE rp_RETAIL017PROC(
ID NUMBER(10) not null,
AD_CLIENT_ID NUMBER(10),
AD_ORG_ID NUMBER(10),
OWNERID NUMBER(10),
MODIFIERID NUMBER(10),
CREATIONDATE VARCHAR2(8),
MODIFIEDDATE DATE,
ISACTIVE CHAR(1) not null,
AD_PI_ID NUMBER(10),
BILLDATE NUMBER(8),
DOCNO VARCHAR2(80),
C_STORE_ID NUMBER(10),
M_PRODUCT_ID NUMBER(10),
M_PRODUCTALIAS_ID NUMBER(10),
M_ATTRIBUTESETINSTANCE_ID NUMBER(10),
TYPE NUMBER(1),
QTY NUMBER(10),
PRICEACTUAL NUMBER(14,2),
ACOST NUMBER,
PERCOST NUMBER,
TOT_AMT_ACTUAL NUMBER,
PRICEACOST NUMBER,
TOT_AMT_COST NUMBER,
PREGROSS NUMBER,
PROFITCOST NUMBER,
DESCRIPTION VARCHAR2(765),
PRICELIST NUMBER(14,2),
TOT_AMT_LIST NUMBER(18,4))
ON COMMIT PRESERVE ROWS;
事务级:
CREATE GLOBAL TEMPORARY TABLE rp_RETAIL017PROC(
ID NUMBER(10) not null,
AD_CLIENT_ID NUMBER(10),
AD_ORG_ID NUMBER(10),
OWNERID NUMBER(10),
MODIFIERID NUMBER(10),
CREATIONDATE VARCHAR2(8),
MODIFIEDDATE DATE,
ISACTIVE CHAR(1) not null,
AD_PI_ID NUMBER(10),
BILLDATE NUMBER(8),
DOCNO VARCHAR2(80),
C_STORE_ID NUMBER(10),
M_PRODUCT_ID NUMBER(10),
M_PRODUCTALIAS_ID NUMBER(10),
M_ATTRIBUTESETINSTANCE_ID NUMBER(10),
TYPE NUMBER(1),
QTY NUMBER(10),
PRICEACTUAL NUMBER(14,2),
ACOST NUMBER,
PERCOST NUMBER,
TOT_AMT_ACTUAL NUMBER,
PRICEACOST NUMBER,
TOT_AMT_COST NUMBER,
PREGROSS NUMBER,
PROFITCOST NUMBER,
DESCRIPTION VARCHAR2(765),
PRICELIST NUMBER(14,2),
TOT_AMT_LIST NUMBER(18,4))
ON COMMIT delete ROWS;
Oracle创建临时表的语法如下:
CREATE GLOBAL TEMPORARY TABLE table
"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}]
[, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"
ON COMMIT {DELETE | PRESERVE } ROWS ;
在Oracle中,可以创建以下两种临时表:
1) 会话特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT PRESERVE ROWS;
2) 事务特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
创建临时表空间:
create temporary tablespace G3DATATEST_TEMP tempfile 'D:\SERVER\DATABASE\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\G3DATATEST_TEMP.dbf' size 50M autoextend ON next 10M maxsize 100M;
百度直接搜索“oracle 如何创建临时表”,会有你想要的答案!