Oracle临时表创建的基本语句是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle临时表创建的基本语句是啥相关的知识,希望对你有一定的参考价值。

最好给几个通用的例子,O(∩_∩)O谢谢

首先是创建临时表的语法:

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;
参考技术A 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
参考技术B 创建临时表空间:
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;
参考技术C 百度直接搜索“oracle 如何创建临时表”,会有你想要的答案!

基本sql语句--临时表

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。
创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)
临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
DROP TABLE tmp_table

如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。

如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP

总结
因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。
1. 临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表:
定义字段:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)
2)直接将查询结果导入临时表
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
2. 另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快,语法如下:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP
3. 从上面的分析可以看出临时表的数据是会被清空的,你断开了连接就会被自动清空,但是你程序中不可能每发行一次sql就连接一次数据库吧(如果是这样的话,那就会出现你担心的问题,如果不是就没有问题),因为只有断开数据库连接才会被清空数据,在一个数据库连接里面发行多次sql的话系统是不会自动清空临时表数据的。

以上是关于Oracle临时表创建的基本语句是啥的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01652 - 无法在表空间中将临时段扩展 4096 (oracle 10)

oracle数据库建立临时表,sql语句

如何处理Oracle中TEMP表空间满的问题

Oracle 临时表空间 SQL语句

Oracle 临时表空间 SQL语句

oracle 修改表结构或修改视图时很慢,直接让PLSQL卡死,不知道是啥原因? 重启oracle 服务却又可以了!