在oracle可以创建临时表吗
1个回答
展开全部
oracle可以创建临时表,ORACLE临时表有两种类型:会话级的临时表和事务级的临时表。
1)ON
COMMIT
DELETE
ROWS
它是临时表的默认参数,表示临时表中的数据仅在事物过程(Transaction)中有效,当事物提交(COMMIT)后,临时表的暂时段将被自动截断(TRUNCATE),但是临时表的结构
以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。
2)ON
COMMIT
PRESERVE
ROWS
它表示临时表的内容可以跨事物而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。但是临时表的结构以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。
1:会话级的临时表的数据和你当前会话有关系,当前SESSION不退出的情况下,临时表中的数据就还存在,临时表的数据只有当你退出当前SESSION的时候才被截断(TRUNCATE
TABLE),如下所示:
会话级别的临时表创建:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;
或
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
PRESERVE
ROWS
AS
SELECT
*
FROM
TEST;
操作示例:
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------
1
kerry
SQL>
INSERT
INTO
TMP_TEST
SELECT
2,
'rouce'
FROM
DUAL;
1
row
inserted
SQL>
ROLLBACK;
Rollback
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
2:事务级的临时表(默认),这种类型的临时表与事务有关,当进行事务提交或者事务回滚的时候,临时表的数据将自行截断,即当COMMIT或ROLLBACK时,数据就会被TRUNCATE掉,其它的特性和会话级的临时表一致。
事务级临时表的创建方法:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;
或
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
DELETE
AS
SELECT
*
FROM
TEST;
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
------------------------
SQL>
1)ON
COMMIT
DELETE
ROWS
它是临时表的默认参数,表示临时表中的数据仅在事物过程(Transaction)中有效,当事物提交(COMMIT)后,临时表的暂时段将被自动截断(TRUNCATE),但是临时表的结构
以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。
2)ON
COMMIT
PRESERVE
ROWS
它表示临时表的内容可以跨事物而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。但是临时表的结构以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。
1:会话级的临时表的数据和你当前会话有关系,当前SESSION不退出的情况下,临时表中的数据就还存在,临时表的数据只有当你退出当前SESSION的时候才被截断(TRUNCATE
TABLE),如下所示:
会话级别的临时表创建:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;
或
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
PRESERVE
ROWS
AS
SELECT
*
FROM
TEST;
操作示例:
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------
1
kerry
SQL>
INSERT
INTO
TMP_TEST
SELECT
2,
'rouce'
FROM
DUAL;
1
row
inserted
SQL>
ROLLBACK;
Rollback
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
2:事务级的临时表(默认),这种类型的临时表与事务有关,当进行事务提交或者事务回滚的时候,临时表的数据将自行截断,即当COMMIT或ROLLBACK时,数据就会被TRUNCATE掉,其它的特性和会话级的临时表一致。
事务级临时表的创建方法:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;
或
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
DELETE
AS
SELECT
*
FROM
TEST;
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
------------------------
SQL>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询