使用分区更新表

时间:2017-05-18 13:49:00

标签: sql oracle oracle11g

我们可以在更新表时使用两个分区吗?

例如,我尝试做类似的事情但给我错误。

update student PARTITION (ma_stu_class1, ma_stu_class2)
set branch = 'R'||100;

如果有任何办法,请告诉我。

提前致谢

2 个答案:

答案 0 :(得分:1)

您不能在select和update中使用多个分区。相反,您可以使用以下查询。

MERGE INTO student S
USING (SELECT * FROM student PARTITION(ma_stu_class1)
UNION ALL
SELECT * FROM student PARTITION(ma_stu_class2)) S1
ON (S.CONNON_COLUMN = S1.COMMON_COLUMN)
WHEN MATCHED THEN
UPDATE 
SET 
branch = 'R'||100;

UNION ALL具有多个分区的同一个表并使用MERGE函数可以更新表

答案 1 :(得分:0)

根据documentation,您无法像这样更新多个分区 - 如果可以的话,partition内的PARTITION (partition)右侧会出现一个箭头{1}}图表的一部分,可以通过partition将您带回,的左侧 - 类似于update_set_clause图的上半部分。

相反,您必须在where子句中使用分区键,例如如果你的钥匙在,例如col1和col2,你会这样做:

update student
set    branch = 'R'||100
where  (col1, col2) in (('class1', 'a'), ('class2', 'b'));