oracle - 使用虚拟列的 Oracle 自动 LIST 分区不允许子表上的 REFERENCE 分区
问题描述
我尝试使用虚拟列在测试表上创建分区。这种方法适用于 PARENT 或独立表。但是,如果 PARENT 表是使用虚拟列分区的,我无法在 CHILD 表上创建 REFERENCE 分区。我在创建 CHILD 表时收到以下错误
ORA-14659: Partitioning method of the parent table is not supported
Oracle 版本详情:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production PL/SQL Release 12.2.0.1.0 - Production
请在下面找到脚本。
--######################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;
解决方案
来自 SQL 语言手册
自动列表分区受“列表分区限制”中列出的限制。以下附加限制适用:
- 自动列表分区表在创建时必须至少有一个分区。因为新分区是为新的和未知的分区键值自动创建的,所以自动列表分区表不能有 DEFAULT 分区。
- 索引组织表或外部表不支持自动列表分区。
- 包含可变数组列的表不支持自动列表分区。
- 您不能在自动列表分区表上创建本地域索引。您可以在自动列表分区表上创建全局域索引。
- 自动列表分区表不能是引用分区的子表或父表。
- 子分区级别不支持自动列表分区。
推荐阅读
- python - 为什么 Python 在关键字参数之后允许 *args?
- python - 避免将重复项添加到存储在数据库中的列表的更好方法是什么
- amazon-web-services - 如何为 API Gateway 使用服务到服务和 Cognito 身份验证
- r - 如何将短列表 (#1) 与更大的列表 (#2) 匹配,并使用列表 #2 中的数据获取长度为 #1 的列表
- laravel - vue数据有时不显示!但有时工作!为什么?
- elasticsearch - logstash:从时间戳部分创建指纹
- javascript - 如何访问具有相同类名的多个 Quill 实例的 innerHTML?
- vb.net - VB.NET:未声明 VBA PowerPoint 常量
- aws-lambda - 保存和测试 AWS Lambda 函数
- c - C Tcl 命令未被识别