DECLARE PROCEDURE ex(cmd VARCHAR2) IS BEGIN dbms_output.put_line(cmd); EXECUTE IMMEDIATE cmd; END; PROCEDURE ex_ignore_error(cmd VARCHAR2) IS BEGIN ex(cmd); EXCEPTION WHEN OTHERS THEN NULL; END; PROCEDURE split_part(tbl VARCHAR2,p_part_val VARCHAR2) IS BEGIN ex('alter table '||tbl||' split partition maxvalue at (to_date('''||p_part_val||''',''yyyymmdd'')) into (partition part_'||p_part_val||' tablespace users, partition maxvalue tablespace users)') ;END; BEGIN ex('alter session set deferred_segment_creation = true'); ex_ignore_error('drop table tbl_test purge'); ex_ignore_error('drop table tbl_test2 purge'); --create range-partitioned table without clob field ex('create table tbl_test(id number, part_key date) tablespace users partition by range(part_key) (partition maxvalue values less than (maxvalue))'); --create range-partitoned table having a clob field ex('create table tbl_test2(id number, part_key date, clob_col clob) tablespace users partition by range(part_key) (partition maxvalue values less than (maxvalue))'); -- the table is empty. Splitting the maxvalue partition for the table without clob split_part('tbl_test','20200101'); -- until here no segments is generated for tbl_test and tbl_test2 tables -- spltting the maxvalue partition for the table having clob field split_part('tbl_test2','20200101'); -- two segments are created for the table having clob field -- SELECT * FROM user_segments WHERE segment_name IN ('TBL_TEST','TBL_TEST2') --TBL_TEST2 PART_20200101 TABLE PARTITION ASSM USERS --TBL_TEST2 MAXVALUE TABLE PARTITION ASSM USERS END; SELECT * FROM user_segments WHERE segment_name IN ('TBL_TEST','TBL_TEST2')