update所有分区的字段oracle,分区表分区字段的update操作

默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作。

例:创建分区表test_part进行实验

create table TEST_PART

(

A1 NUMBERnot null,

A2 DATE      not null,

A3 VARCHAR2(6) not null,

A4 DATE not null,

A5 NUMBER not null,

)

partition by range (A1)

(

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 P5 values less than (5000),

partition P6 values less than (MAXVALUE)

);

插入如下的数据

SQL> select * from test_part;

A1 A2          A3     A4                  A5

---------- ----------- ------ ----------- ----------

123 2006-06-30  123456 2006-06-30         123

456 2006-06-30  asdfgh 2006-06-30         456

1 2006-06-30  234123 2006-06-30           1

2 2006-06-30  234234 2006-06-30           2

1234 2006-06-30  456789 2006-06-30        1234

1111 2006-06-30  ewrqwe 2006-06-30        1111

2222 2006-06-30  fdafda 2006-06-30        2222

3333 2006-06-30  342342 2006-06-30        3333

5678 2006-06-30  qwerty 2006-06-30        5678

9 rows selected

分区P1、P2的数据分别为:

SQL> select rowid,t.* from test_part partition(p1) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLoAAGAAAtsEAAB        456 2006-06-30  asdfgh 2006-06-30         456

AAAGLoAAGAAAtsEAAC          1 2006-06-30  234123 2006-06-30           1

AAAGLoAAGAAAtsEAAD          2 2006-06-30  234234 2006-06-30           2

AAAGLoAAGAAAtsEAAE        123 2006-06-30  123456 2006-06-30         123

SQL> select rowid,t.* from test_part partition(p2) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC       1234 2006-06-30  456789 2006-06-30        1234

AAAGLwAAGAAA+8MAAD       1111 2006-06-30  ewrqwe 2006-06-30        1111

直接update提示错误

SQL> update test_part set a1=1123 where a1=123;

update test_part set a1=1123 where a1=123

ORA-14402: 更新分区关键字列将导致分区的更改

打开row movement属性

SQL> alter table test_part enable row movement;

Table altered

再次执行update操作

SQL> update test_part set a1=1123 where a1=123;

1 row updated

执行是成功的并迁移到分区P2上了,且这时候rowid也发生了变化

SQL> select rowid,t.* from test_part partition(p2) t;

ROWID                      A1 A2          A3     A4                  A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC       1234 2006-06-30  456789 2006-06-30        1234

AAAGLwAAGAAA+8MAAD       1111 2006-06-30  ewrqwe 2006-06-30        1111

AAAGLwAAGAAA+8PAAB       1123 2006-06-30  123456 2006-06-30         123

SQL>

enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)

但是,也是有限制性的:对于普通表(heap-organized)行迁移后rowid会发生变化,对于索引表(index-organized)rowid虽然依然有效,但是其实际对应的物理构成是错误的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,分区表查询时是允许进行更新操作的。分区表是一种将数据分割成多个逻辑部分的表,每个部分都被称为分区。这种分割可以根据特定的条件进行,例如按照日期、地理位置、客户等。分区表的设计和使用可以提高查询性能并简化维护。 当我们需要更新分区表时,可以使用UPDATE语句来修改表中的数据。只需提供指定的分区或特定的查询条件即可对分区表中的数据进行更改。更新操作可以针对单个分区进行,也可以同时更新多个分区。 需要注意的是,分区表进行更新操作时,要确保更新的数据符合分区规则。换句话说,被更新的数据所在的分区必须与更新操作的条件相匹配。如果不满足分区规则,更新操作可能会失败或者更新的数据不会生效。 另外,对于包含全局索引的分区表进行更新操作时,需要特别注意。全局索引是在整个表上创建的索引,而不是在各个分区上分别创建的索引。在更新分区表时,如果更新操作会导致分区键的变化,那么全局索引也需要相应地更新。这就需要进行一些额外的操作,以确保全局索引的一致性和正确性。 总结来说,Oracle分区表是允许进行更新操作的,但要注意更新的数据必须符合分区规则,并且在更新包含全局索引的分区表时需要额外的操作来维护索引的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值