oracle表多列分区问题

lihaifeng_1987 2008-11-18 06:42:33
建立如下表

create table test_partition2 (
year_ID NUMBER(4) not null,
name char(200),
MON_ID NUMBER(2) not null
)
PARTITION BY RANGE(mon_ID,year_ID)
(
PARTITION PART_1 VALUES LESS THAN ( 2,2000) TABLESPACE TBS_DATA,
PARTITION PART_2 VALUES LESS THAN ( 2,2003) TABLESPACE TBS_DATA ,
PARTITION PART_3 VALUES LESS THAN ( 3,2000) TABLESPACE TBS_DATA,
PARTITION PART_4 VALUES LESS THAN ( 3,2003) TABLESPACE TBS_DATA ,
PARTITION PART_5 VALUES LESS THAN (13,2000) TABLESPACE TBS_DATA ,
PARTITION PART_6 VALUES LESS THAN (13,2003) TABLESPACE TBS_DATA,
PARTITION PART_7 VALUES LESS THAN (13,2020) TABLESPACE TBS_DATA
);


插入这些语句

insert into test_partition2 values(2000,'a',1);
insert into test_partition2 values(2000,'a',2);
insert into test_partition2 values(2000,'a',3);
insert into test_partition2 values(2002,'a',1);
insert into test_partition2 values(2002,'a',3);
insert into test_partition2 values(2003,'a',9);
insert into test_partition2 values(2019,'a',1);
commit;

然后按每个分区查询
select * from test_partition2 partition(part_1);
结果是:2000 a 1
2002 a 1
2019 a 1
是否可以这样理解:mon_id<2 ,就不用管year_id,把这三条记录放到part_1分区里面?

第二个问题:
select * from test_partition2 partition(part_2)时
结果是:2000 a 2
这时候数据库是怎么把这条记录插到这个分区里面的呢?这条数据为什么没有放到part_3里面?

请给我讲解一下数据库是按什么规则把数据插到各个分区里面的,谢谢啦
...全文
534 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关注...ing
范佩西_11 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 linzhangs 的回复:]
我不说了吗先判断第一个,
你创建的时候PARTITION PART_1 VALUES LESS THAN ( 2,2000) TABLESPACE TBS_DATA,
因为1 <2,所以所有1,*的都归到第一个分区
[/Quote]也就是说第一个是主第二个是次
范佩西_11 2008-11-20
  • 打赏
  • 举报
回复
我不说了吗先判断第一个,
你创建的时候PARTITION PART_1 VALUES LESS THAN ( 2,2000) TABLESPACE TBS_DATA,
因为1<2,所以所有1,*的都归到第一个分区
lihaifeng_1987 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linzhangs 的回复:]
第一个问题:对的,先判断小于第一个再判断小于第二个,可以小于等于第一个,小于第二个,但不可以全等于,比如说(2,2003) 必须归到part_3去了
第二个问题:
首先mon_id <=2且year_id <2000的归到part_1;
而mon_id =2 且year_id>2000 且year_id <2003归到part_2;
同理mon_id =2且 <=3 肯定归到part_3中,而mon_id =2且year_id <2003也要归到part_3中。
[/Quote]
你解答的第二个问题“首先mon_id <=2且year_id <2000的归到part_1; ”这里不对呀(2002 a 1)和(2019 a 1)都在part_1里面呀,但是2002和2019都>2000。
lihaifeng_1987 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hdhai9451 的回复:]
你这样创建分区本身就有问题了,一年里哪来13月份呢?
而且那样分区的时间段是没有什么意义的
[/Quote]
不是要less than(13,)吗?插入13应该不满足才对呀。
Andy__Huang 2008-11-18
  • 打赏
  • 举报
回复
你这样创建分区本身就有问题了,一年里哪来13月份呢?
而且那样分区的时间段是没有什么意义的
范佩西_11 2008-11-18
  • 打赏
  • 举报
回复
先判断第一个,再判断第二个,并且可以必须有一个小于,不可能两个都等于,比如说
2,2000归到part_2;
2,2003归到part_3
范佩西_11 2008-11-18
  • 打赏
  • 举报
回复
最后一个笔误mon_id =2且year_id >2003也要归到part_3中。
范佩西_11 2008-11-18
  • 打赏
  • 举报
回复
第一个问题:对的,先判断小于第一个再判断小于第二个,可以小于等于第一个,小于第二个,但不可以全等于,比如说(2,2003) 必须归到part_3去了
第二个问题:
首先mon_id <=2且year_id<2000的归到part_1;
而mon_id =2 且year_id>2000 且year_id<2003归到part_2;
同理mon_id =2且<=3 肯定归到part_3中,而mon_id =2且year_id<2003也要归到part_3中。
下载了一大堆的免费文档 我也贡献一个我自己写的PowerDesigner16 5的使用文档 这个是公司领导让我自己写来做使用指导用的 写的仓促 多有不恰当的地方 望大家见谅 1 这个是16 5的版本 2 这个是以oralce11g为模板 3 文档目录如下: PowerDesigner 16 5 指导 1 一 安装 3 二 新建模板步骤 这里以Oracle11g数据库为例 3 1 新建Model 3 2 Modle设置 3 3 模板设置 4 4 右侧工具条 5 5 新建测试包 6 6 配置 6 6 1进入模板 6 6 2新建 6 6 3修改 7 6 4添加注释 7 6 5属性设置 8 6 5 1 8 6 5 2 9 6 5 3 9 6 5 4 9 6 6添加关系 10 6 7关系设置 10 6 8模板保存 12 6 9查看模板 12 三 模板导入脚本 12 1 打开Change Current DRMS 12 2 删除多余双引号 13 3 生成脚本 13 四 配置数据库 15 1 点击Database >Configure Connections 15 2 选择第三个系统数据根源 17 3 选择Oracle in OraDb11g hom1 选择下一步 然后点击完成 17 4 数据源配置 18 5 配置成功 19 五 反向工程生成模板 20 1 按照二 1和二 2生成一个空模板 20 2 选择Database >Update Model from Database 20 3 选择数据源 20 4 数据源配置 21 5 选择反向工程导出对象 22 6 可以看到反向工程自动生成的模板 即代操作工程 23 六 生成HTML文档 24 1 点击Report >Generate Report 24 2 配置完成 点击确认即可 24 3 打开html文档 应该是下图格式 25">下载了一大堆的免费文档 我也贡献一个我自己写的PowerDesigner16 5的使用文档 这个是公司领导让我自己写来做使用指导用的 写的仓促 多有不恰当的地方 望大家见谅 1 这个是16 5的版本 2 这个是以oralce11g为模板 3 文档 [更多]

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧