【问题标题】:Oracle create table using with clauseOracle 使用 with 子句创建表
【发布时间】:2011-07-22 17:05:12
【问题描述】:

我可以从使用with 子句形成的查询创建表吗?

【问题讨论】:

    标签: sql oracle common-table-expression


    【解决方案1】:

    当然:

    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
    

    【讨论】:

    • 如果有多个已定义的表呢? IE。如果你有“WITH x as (...), y as (...)”?
    • 在 oracle 12c 中不起作用。 Oracle 说“ora-32034:不支持使用 with 子句”。 create table t as 之后的所有内容都应该放在 select * from (...here...) 中。就像@saleh helou 的回答一样。
    • @Poolka: works for me 即使在 Oracle 11 上
    【解决方案2】:

    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
    ) 
    );
    

    【讨论】:

    • 那是前一个答案的几乎完全相同的副本......有什么理由吗?
    • 对我来说比第一个答案更有意义......虽然它实际上是一样的。谢谢。
    【解决方案3】:

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

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

    将从select 语句的schema 中创建table_name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-14
      • 2016-12-07
      • 2011-08-18
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多