Как мне скопировать таблицы из одного табличного пространства в другое в Oracle? - PullRequest
0 голосов
/ 18 января 2019

Я должен сделать подробный анализ заказов, представленных в 1992 году из 2 таблиц, ЗАКАЗЫ и LINEITEM. Мне нужно создать новое табличное пространство и создать две таблицы с именами ORDERS1992 и LINEITEM1992 для хранения данных за 1992 год. Новые таблицы должны иметь соответствующие ограничения согласованности. Проблема, с которой я столкнулся, это КОПИРОВАНИЕ по таблицам из одного табличного пространства в другое. Это то, что у меня есть в моем сценарии:

CREATE TABLESPACE TABLESPACE1992
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT MANUAL
DATAFILE '/home/oracle/app/oracle/oradata/db/tablespace1992.dbf'
SIZE 2M AUTOEXTEND OFF;

CREATE TABLE ORDERS1992 (
TSO_ORDERKEY    NUMBER(12)  NOT NULL,
TSO_CUSTKEY NUMBER(12)  NOT NULL,
TSO_ORDERSTATUS CHAR(1)     NOT NULL,
TSO_TOTALPRICE  NUMBER(12,2)    NOT NULL,
TSO_ORDERDATE   DATE        NOT NULL,
TSO_ORDERPRIORITY CHAR(15)  NOT NULL,
TSO_CLERK       CHAR(15)    NOT NULL,
TSO_SHIPPRIORITY    NUMBER(12)  NOT NULL,
TSO_COMMENT VARCHAR(79) NOT NULL,
CONSTRAINT ORDERS1992_PKEY PRIMARY KEY (TSO_ORDERKEY),
CONSTRAINT ORDERS1992_FKEY1 FOREIGN kEY (TSO_CUSTKEY)
    REFERENCES CUSTOMER(C_CUSTKEY),
CONSTRAINT ORDERS1992_CHECK1 CHECK( TSO_TOTALPRICE >= 0) ) TABLESPACE TABLESPACE1992;

CREATE TABLE LINEITEM1992 (
TSL_ORDERKEY    NUMBER(12)  NOT NULL,
TSL_PARTKEY NUMBER(12)  NOT NULL,
TSL_SUPPKEY NUMBER(12)  NOT NULL,
TSL_LINENUMBER  NUMBER(12)  NOT NULL,
TSL_QUANTITY    NUMBER(12,2)    NOT NULL,
TSL_EXTENDEDPRICE NUMBER(12,2)  NOT NULL,
TSL_DISCOUNT    NUMBER(12,2)    NOT NULL,
TSL_TAX     NUMBER(12,2)    NOT NULL,
TSL_RETURNFLAG  CHAR(1)     NOT NULL,
TSL_LINESTATUS  CHAR(1)     NOT NULL,
TSL_SHIPDATE    DATE        NOT NULL,
TSL_COMMITDATE  DATE        NOT NULL,
TSL_RECEIPTDATE DATE        NOT NULL,
TSL_SHIPINSTRUCT    CHAR(25)    NOT NULL,
TSL_SHIPMODE    CHAR(10)    NOT NULL,
TSL_COMMENT VARCHAR(44) NOT NULL,
CONSTRAINT TSLINEITEM_PKEY PRIMARY KEY (TSL_ORDERKEY, TSL_LINENUMBER),
CONSTRAINT TSLINEITEM_FKEY1 FOREIGN kEY (TSL_ORDERKEY)
    REFERENCES ORDERS1992(TSO_ORDERKEY),
CONSTRAINT TSLINEITEM_FKEY2 FOREIGN KEY (TSL_PARTKEY)
    REFERENCES PART(P_PARTKEY),
CONSTRAINT TSLINEITEM_FKEY3 FOREIGN KEY (TSL_PARTKEY,TSL_SUPPKEY)
    REFERENCES PARTSUPP(PS_PARTKEY, PS_SUPPKEY),
CONSTRAINT TSLINEITEM_FKEY4 FOREIGN kEY (TSL_SUPPKEY)
    REFERENCES SUPPLIER(S_SUPPKEY),
CONSTRAINT TSLINEITEM_CHECK1 CHECK (TSL_QUANTITY >= 0),
CONSTRAINT TSLINEITEM_CHECK2 CHECK (TSL_EXTENDEDPRICE >= 0),
CONSTRAINT TSLINEITEM_CHECK3 CHECK (TSL_TAX >= 0),
CONSTRAINT TSLINEITEM_CHECK4 CHECK (TSL_DISCOUNT BETWEEN 0.00 AND 1.00) ) TABLESPACE TABLESPACE1992;

1 Ответ

0 голосов
/ 18 января 2019

Когда вы говорите копировать таблицы , вы имеете в виду копировать данные?

insert 
  into orders1992(...)
select ...
  from orders
 where tso_orderdate >=  date '1992-01-01'
   and tso_orderdate <   date '1993-01-01';

insert 
  into lineitem1992(...)
select ...
  from lineitem
 where tsl_orderkey in(select tso_orderkey from orders1992);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...