当你创建一个带有列表分区的表时,你会给它一个默认的分区名称,并在你需要一个新分区时将其拆分。
让我们稍微检查一下。例如,您有一个名为 demo_table 的表,对吗?
CREATE TABLE DEMO_TABLE
(
ID NUMBER,
NAME VARCHAR2(100 CHAR)
)
PARTITION BY LIST (ID)
(
PARTITION PDEFAULT VALUES (DEFAULT)
);
并在需要时创建一个过程来拆分其分区。
CREATE OR REPLACE PROCEDURE DEMO_PROCEDURE (TABLENAME VARCHAR2,PID VARCHAR2)
IS
V_CONTROL NUMBER;
BEGIN
--Controls if any of the given partitions created before??
SELECT COUNT (*)
INTO V_CONTROL
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = TABLENAME
AND PARTITION_NAME = 'P' || PID;
IF V_CONTROL > 0
THEN
EXECUTE IMMEDIATE
'ALTER TABLE '||TABLENAME ||' DROP PARTITION P'|| PID;
END IF;
EXECUTE IMMEDIATE
'ALTER TABLE '||TABLENAME ||' SPLIT PARTITION PDEFAULT VALUES('
|| PID
|| ') INTO ( PARTITION P'
|| PID
|| ',PARTITION PDEFAULT)';
END DEMO_PROCEDURE;
/
下面的代码应该可以工作。
官方文档。
alter table demo_table
split partition YOUR_DEFAULT_PARTITION(In your case it is PART_35) values('9999') into
(partition YOUR_NEW_PARTITION, partition YOUR_DEFAULT_PARTITION(In your case it is PART_35))