Раздел Oracle LIST, использующий виртуальный столбец, не разрешающий раздел REFERENCE для дочерней таблицы - PullRequest
0 голосов
/ 08 ноября 2019

Я попытался создать раздел на тестовой таблице, используя виртуальный столбец. Этот подход хорошо работает для РОДИТЕЛЯ или автономных таблиц. Однако я не могу создать раздел REFERENCE для таблицы CHILD, если таблица PARENT разделена с использованием виртуального столбца. Я получаю следующую ошибку при создании таблицы таблицы CHILD

ORA-14659: Partitioning method of the parent table is not supported

Сведения о версии Oracle: Oracle Database 12c Enterprise Edition, выпуск 12.2.0.1.0 - 64-разрядная рабочая версия PL / SQL, выпуск 12.2.0.1.0 - производственная

Пожалуйста, найдите скрипт ниже.

--######################PARENT TABLE###########################################
DROP TABLE BILL_HEADER_TST;

CREATE TABLE BILL_HEADER_TST
(
   BILL_HDR_SID   NUMBER (30) NOT NULL,
   TCN                VARCHAR2 (21 BYTE) NOT NULL,
   TCN_DATE           DATE,
   PROGRAM_CID        NUMBER,
   CONSTRAINT XPKBILL_HEADER_TST PRIMARY KEY (BILL_HDR_SID),
   PARTN_KEY          NUMBER

                            AS (   PROGRAM_CID
                                || TO_NUMBER (TO_CHAR (TCN_DATE, 'YYYYMM')))
                            VIRTUAL
)
PARTITION BY LIST (PARTN_KEY)   AUTOMATIC (PARTITION PDEFAULT VALUES (1201401));


------------------LOCAL INDEXES------------------------------------------------

CREATE INDEX XIE33BILL_HEADER_TST
   ON BILL_HEADER_TST (TCN_DATE)
   LOCAL;


CREATE INDEX XIE38BILL_HEADER_TST
   ON BILL_HEADER_TST (PROGRAM_CID)
   LOCAL;

---------------------INDEXES---------------------------------------------------
CREATE UNIQUE INDEX XAK1BILL_HEADER_TST
   ON BILL_HEADER_TST (TCN)
   LOGGING
   NOPARALLEL;


--#############CHILD TABLE#####################################################   
DROP TABLE BILL_LINE_TST;

CREATE TABLE BILL_LINE_TST
(
   BILL_LINE_SID                 NUMBER (30) NOT NULL,
   BILL_HDR_SID               NUMBER (30) NOT NULL,
   CLM_TYPE_CID                   NUMBER (3),
   PROGRAM_CID                    NUMBER,
   CONSTRAINT XPKBILL_LINE_TST PRIMARY KEY (BILL_LINE_SID),
   CONSTRAINT XFK17_BILL_LINE_TST FOREIGN KEY
      (BILL_HDR_SID)
       REFERENCES BILL_HEADER_TST (BILL_HDR_SID) ON DELETE CASCADE
)
PARTITION BY REFERENCE (XFK17_BILL_LINE_TST)
ENABLE ROW MOVEMENT;


1 Ответ

0 голосов
/ 10 ноября 2019

Из руководства по языку SQL

Автоматическое разбиение списка подчиняется ограничениям, перечисленным в разделе «Ограничения разбиения списка». Применяются следующие дополнительные ограничения:

  • Автоматическая таблица с многораздельными списками должна иметь хотя бы один раздел при создании. Поскольку новые разделы создаются автоматически для новых и неизвестных значений ключей разделения, автоматическая таблица разделенных списков не может иметь раздел DEFAULT.
  • Автоматическое разбиение списка не поддерживается для таблиц с организованным индексом или внешних таблиц.
  • Автоматическое разбиение списка не поддерживается для таблиц, содержащих столбцы varray.
  • Невозможно создать индекс локального домена для автоматической таблицы, разбитой на списки. Вы можете создать глобальный индекс домена для автоматической таблицы с секционированными списками.
  • Автоматическая таблица с секционированными списками не может быть дочерней таблицей или родительской таблицей для секционирования ссылок.
  • Автоматическое секционирование спискане поддерживается на уровне подразделов.
...