使用WITH子句创建Oracle表

39

我可以通过使用with子句形成的查询来创建表格吗?

3个回答

76
当然:
CREATE TABLE t
AS 
WITH some_data AS ( 
   SELECT 1 as some_value 
   FROM dual

   UNION ALL 

   SELECT 2 
   FROM dual
) 
SELECT * 
FROM some_data

7
如果有多个定义的表格,怎么办?例如,如果你有"WITH x as (...), y as (...)"? - Kalin
不适用于Oracle 12c。Oracle报错:“ORA-32034:不支持使用WITH子句”。在“create table t as”之后的所有内容都应放在“select * from (...here...)”中,就像@saleh helou的回答一样。 - user10325516
@Poolka:即使在Oracle 11上,这对我有效 - user330315
1
@Poolka 我最开始也遇到了同样的错误,直到我意识到 CREATE 语句中的 WITH 和 SELECT 似乎不能放在括号内: 例如 CREATE TABLE t AS ( WITH some_data AS (...) SELECT * FROM some_data ), 应该写成 CREATE TABLE t AS WITH some_date AS (...) SELECT * FROM some_data - Sander Vanden Hautte
@SanderVandenHautte 感谢您的评论。现在我明白了。这真是不直观。我曾经添加外部选择查询 create as (select * from ( with as ... )) 使其正常工作。就像这里其他答案中所示。从未想过括号必须或不必在语句周围使用。 - user10325516

3

CREATE TABLE table_name AS语句根据SELECT语句创建一个表。使用WITH子句的解决方案如下:

CREATE TABLE t
AS 
SELECT * FROM (
WITH some_data AS ( 
   SELECT 1 as some_value 
   FROM dual

   UNION ALL 

   SELECT 2 
   FROM dual
) 
);

1
这几乎是前一个答案的完全复制...有什么原因吗? - Nico Haase
1
第二个回答对我来说比第一个更有意义...虽然实际上它们是一样的。谢谢。 - Yoav24

2

对于多个CTE(通用表达式;即多个WITH子句),我发现相同的语法适用。例如:


CREATE TABLE schema.table_name as 
WITH table1 as (SELECT 1),
table2 as (SELECT 2)

select * from table2

将从select语句创建schema中的table_name


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接