CREATE TABLE AS¶
说明¶
根据查询结果创建表
参数¶
LOCAL
GLOBAL
TEMPORARY
TEMP
指定创建一个临时表
OBJECT
如果声明了此参数,则该表自动创建一个数据类型,该数据类型代表对应该表一行的元组类型(结构类型).因此,这时表不能和一个现有数据类型同名.
QU
指定创建一个快速更新表,参见create table里对快速更新表的说明.
new_table
要创建的表的名称
ON COMMIT {DELETE | PRESERVE} ROWS
提交时删除还是保留行,即创建事务级临时表还是会话级临时表,只有在创建全局临时表时才有效。
默认为ON COMMIT DELETE ROWS,事务级临时表
注解
- CREATE TABLE AS 首先进行建表操作,然后将 SELECT 语句的执行结果插入到该表中。 CREATE AS 语句与 SELECT INTO 语句的作用是相同的。
- 可以使用 TEMPORARY 或 TEMP 关键字指定创建一个临时表。 该表只对当前连接有效,在连接退出时就会被自动删除。
- 可以使用 GLOBAL TEMPORARY 和 ON COMMIT 选项创建事务级临时表和会话级临时表。 临时表的定义对所有有权限的会话可见,各个会话临时表中的数据是相互隔离的。 临时表需要记录日志,以支持事务级临时表的回滚等操作。 事务级临时表的数据在事务提交或回滚时会被截断,会话级临时表的数据在会话结束时会被截断。 临时表不会自动删除,只能在没有其他会话绑定时使用 DROP TABLE 语句显示删除。
- 若通过CREATE TABLE AS 语句创建的表不是本地临时表,则不能与现有的非本地临时表重名。 若创建的表是本地临时表,则可以与现有的非本地临时表重名,但不能与现有的本地临时表重名。
示例¶
示例1: 根据查询结果创建表
-- 清理环境
DROP TABLE tab2 CASCADE;
DROP TABLE tab1 CASCADE;
-- 创建表并插入数据
CREATE TABLE tab1 (a INT, b INT);
INSERT INTO tab1 VALUES (1, 11);
INSERT INTO tab1 VALUES (2, 12);
INSERT INTO tab1 VALUES (3, 13);
SELECT * FROM tab1 ORDER BY a, b;
A(int) |B(int) |
------------------------
1 |11 |
------------------------
2 |12 |
------------------------
3 |13 |
总数目:3
-- 根据查询结果创建表
CREATE TABLE tab2 AS SELECT b FROM tab1 WHERE a > 1 ORDER BY a;
SELECT * FROM tab2 ORDER BY b;
B(int) |
------------
12 |
------------
13 |
总数目:2
-- 删除表
DROP TABLE tab2;
DROP TABLE tab1;