【ASK_ORACLE】使用insert语句将普通表转换成分区表

来源:这里教程网 时间:2026-03-03 18:11:26 作者:

实验环境

搭建平台:VMware Workstation

OS:OL 6.10

DB:Oracle 11.2.0.4

转换步骤 本文将scott用户的emp表为例,转换成分区表 1.先创建一个空的分区表,这里使用范围分区SQL> conn scott/tigerSQL> create table emppart (ename varchar2(15) ,sal number(4))partition by range (sal)(partition p1 values less than (1000),partition p2 values less than (2000),partition p3 values less than (3000),partition p4 values less than (4000),partition pmax values less than (maxvalue));  2.将emp数据插入到新建的分区表 (如果字段的对应关系正确,Oracle会自动帮我们按分区分类)SQL> insert into emppart (ename,sal) select ename ,sal from emp;  3.验证 (1)任意查看几个分区的数据,看是否正确分类SQL> select * from emppart partition (p1);        QTY NAME---------- ------------------------------       800 SMITH       950 JAMES SQL> select * from emppart partition (p3);        QTY NAME---------- ------------------------------      2975 JONES      2850 BLAKE      2450 CLARK SQL> select * from emppart partition (pmax);        QTY NAME---------- ------------------------------      5000 KING ##插入一行数据试试SQL> insert into emppart values (6800,'HHW'); 1 row created. SQL> select * from emppart partition (pmax);  ##正常输出        QTY NAME---------- ------------------------------      5000 KING       6800 HHW  (2)将pmax再分区验证下SQL> alter table emppart split partition pmax at (6000) into (partition p5 ,partition pmax);  Table altered. SQL> select * from emppart partition (pmax);        QTY NAME---------- ------------------------------      6800 HHW SQL> select * from emppart partition (p5);  ## 验证新分区没问题        QTY NAME---------- ------------------------------       5000 KING  4. 重命名分区表SQL> drop table emp; ##删掉原表才能重命名SQL> alter table emppart rename to emp;  注: 1. 如果表过大,为了加快insert的速度,可以使用下面的方法:(1)SQL>alter session enable parallel dml;(2)SQL> insert /*+APPEND PARALLEL*/ into emppart (ename,sal) select ename ,sal from emp; (3)SQL>alter session disable parallel dml; 2. 还可以简化成 一行命令直接转换:(1)SQL>alter session enable parallel dml;(2)create table emppart (ename varchar2(15) ,sal number(4)) partition by range (sal)(<此处省略>) as insert /*+PARALLEL*/ into emppart (ename,sal) select ename ,sal from emp; (3)SQL>alter session disable parallel dml;

相关推荐