Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3673198
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2021-01-06 22:32:13


从 Oracle 12.2 开始,支持 move 时加 where 条件,例如:
alter table T move including rows where id > 10000;
alter table T move including rows where name like 'DR%';
alter table T move including rows where start_date between sysdate-100 and sysdate-50;

参考:

该子句允许您指定在以下ALTER TABLE操作期间保留哪些行:移动,拆分或合并表分区或子分区;移动表;或将未分区表转换为分区表。数据库仅保留满足中指定条件的行where_clause。有关此子句的完整语义,请参考官方文档中的 where_clause SELECT。
过滤条件的限制
以下限制适用于该filter_condition条款:
1 仅堆组织表支持过滤条件。
2 过滤条件只能引用被更改的表中的列。筛选条件不能包含引用其他数据库对象的操作,例如联接或子查询。
3 具有通过启用的外键引用的主键或唯一键的表不支持过滤条件。

关于在在线操作中使用过滤条件的限制和注意事项
当您为在线ALTER TABLE操作指定过滤条件时,以下限制和注意事项适用:
1 如果启用了补充日志记录,则不能同时指定filter_condition和ONLINE子句。
2 同时指定filter_condition和ONLINE子句时,在ALTER TABLE操作期间允许在表上进行DML操作。

过滤条件对并发DML操作没有直接影响。但是,请仔细考虑这种组合,因为过滤器操作和DML操作可能会无意间发生冲突,如下所示:
 a插入非分区表将成功。如果不违反分区键条件,则插入分区表将成功。
 b删除操作仅适用于整个ALTER TABLE操作中由过滤条件保留的行。
 c更新操作仅适用于在整个ALTER TABLE操作过程中由过滤条件保留的行。无论更新操作是否已使筛选条件取消了要保留的行的资格,这些更新操作都会成功。
 d在操作开始时不符合过滤条件ALTER TABLE要求保留的行将不被保留,无论更新操作是否使行符合保留的条件。

move 子句的语法:
De.ion of move_table_subpartition.eps follows
指定ONLINE以指示在移动表子分区时允许在表子分区上进行DML操作。


filter_condition 子句的语法:
De.ion of filter_condition.eps follows

参考:

演示:
SQL> select * from t1;

        ID NAME
---------- --------------------
         1 zhang
         2 li
         3 li
         3 wang

SQL> alter table t1 move including rows where name='li';

Table altered.

SQL> select * from t1;

        ID NAME
---------- --------------------
         2 li
         3 li

只留下了符合条件语句,其他的被抛弃。
阅读(3450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~