简体   繁体   English

如何从SELECT AS在Oracle 11g R2中创建表并按范围列表对表进行分区?

[英]How would I create a table in Oracle 11g R2 from a SELECT AS and partition the table by range-list?

I am trying to create a new table called Titles2 from an existing table called Titles. 我正在尝试从一个名为Titles的现有表中创建一个名为Titles2的新表。 I have to use a SELECT AS statement to create the columns in Titles2 from Titles. 我必须使用SELECT AS语句从Titles在Titles2中创建列。 I also have to partition Titles2 by RANGE and then by LIST. 我还必须按RANGE然后按LIST对Titles2进行分区。

The code used to create Titles: 用于创建标题的代码:

SQL> CREATE TABLE Titles
  2    (
  3    Title_id         char(3)     ,
  4    Title            varchar2(40),
  5    Genre            varchar2(10),
  6    Pages            number      ,
  7    Price            number(5,2) ,
  8    Sales            number      ,
  9    Pub_id           char(3)     ,
 10    Pubdate          date        ,
 11    Advance          number(9,2) ,
 12    Royalty_rate     number(5,2) ,
 13    CONSTRAINT Titles_pk PRIMARY KEY (title_id),
 14    CONSTRAINT Titles_Publishers_fk FOREIGN KEY (Pub_id)
 15                             REFERENCES Publishers (pub_id)
 16    )
 17    PARTITION BY RANGE (Pubdate) (
 18    PARTITION P1 VALUES LESS THAN (TO_DATE('01-JAN-1995', 'DD-MON-YYYY')) TABLESPACE TSLab8ben1,
 19    PARTITION P2 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY')) TABLESPACE TSLab8ben2,
 20    PARTITION P3 VALUES LESS THAN (MAXVALUE) TABLESPACE TSLab8ben3
 21    );

Table created.

The following code is what I have so far for creating a Titles2 table from Titles: 到目前为止,以下代码是我从Titles创建Titles2表的内容:

CREATE TABLE Titles2 AS
SELECT Title_id AS TID, Title, Genre, Sales, (Sales * Price) AS Revenue, Pub_id AS P#
FROM Titles
PARTITION BY RANGE (Revenue)
SUBPARTITION BY LIST (Genre)
SUBPARTITION TEMPLATE (
SUBPARTITION G1 VALUES ('history', 'biography'),
SUBPARTITION G2 VALUES ('computer','children'),
SUBPARTITION G3 VALUES (DEFAULT)) (
PARTITION P1 VALUES LESS THAN (100000),
PARTITION P2 VALUES LESS THAN (500000),
PARTITION P3 VALUES LESS THAN (1000000),
PARTITION P4 VALUES LESS THAN (MAXVALUE));

However, the code for creating Titles2 doesn't execute. 但是,用于创建Titles2的代码不会执行。 Would anybody be able to help me get the Titles2 code to execute? 有人可以帮助我获取Titles2代码来执行吗? Thanks! 谢谢!

Create table Titles2 using just create table statement(not CTAS) with appropriate partitions just like you did with Titles . 就像使用Titles一样,仅使用具有适当分区的create table语句(而非CTAS)创建表Titles2 And then use insert statement to populate Titles2 with data from Titles 然后使用insert语句用Titles数据填充Titles2

insert into Titles2 
  select <<columns>>
    from Titles  

Or you can rewrite your last create table statement as follows: 或者,您可以按如下方式重写最后一个create table语句:

CREATE TABLE Titles2
  PARTITION BY RANGE (Revenue)(
    SUBPARTITION BY LIST (Genre)
    SUBPARTITION TEMPLATE (
    SUBPARTITION G1 VALUES ('history', 'biography'),
    SUBPARTITION G2 VALUES ('computer','children'),
    SUBPARTITION G3 VALUES (DEFAULT)) (
    PARTITION P1 VALUES LESS THAN (100000),
    PARTITION P2 VALUES LESS THAN (500000),
    PARTITION P3 VALUES LESS THAN (1000000),
    PARTITION P4 VALUES LESS THAN (MAXVALUE))
   ) AS
SELECT Title_id AS TID
     , Title
     , Genre
     , Sales
     , (Sales * Price) AS Revenue
     , Pub_id AS P#
FROM Titles

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM