Oracle 使用 with 子句创建表
Posted
技术标签:
【中文标题】Oracle 使用 with 子句创建表【英文标题】:Oracle create table using with clause 【发布时间】:2011-07-22 17:05:12 【问题描述】:我可以从使用with
子句形成的查询创建表吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Oracle 使用 with 子句创建表的主要内容,如果未能解决你的问题,请参考以下文章
用于创建表的 Oracle DEFAULT 子句。 “文字论证”?
WITH 子句可以在不使用 Select 语句的情况下具有硬编码值吗?
ORACLE创建临时事务表global temporary table 和 查询时临时表with tempName as (select ) select