CREATE TABLE AS

说明

根据查询结果创建表

语法

create_table_as ::=

table_type_option ::=

参数

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;