ITPUB论坛-中国专业的IT技术社区

 找回密码
 注册
查看: 3293|回复: 9

[每日一题] PL/SQL Challenge 每日一题:2018-3-25 表分区

[复制链接]
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
发表于 2018-3-30 08:48 | 显示全部楼层 |阅读模式

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

每两周的优胜者可获得itpub奖励的技术图书一本。

以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者: Chris Saxon

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

你创建了下列的表来存储发票信息:

create table qz_invoices (
  invoice_id      integer not null primary key,
  raised_datetime date not null,
  paid_datetime   date not null
) partition by range ( raised_datetime, paid_datetime ) (
  partition p0 values less than ( date'2018-01-01', date'2018-01-01' ),
  partition p1 values less than ( date'2018-01-01', date'2019-01-01' ),
  partition p2 values less than ( date'2019-01-01', date'2019-01-01' )
);

下列哪些选项会将一行数据插入到P1分区?

(A)
insert into qz_invoices values (  
  1, date'2017-12-31', date'2017-12-31'  
);

(B)
insert into qz_invoices values (  
  2, date'2018-01-01', date'2017-12-31'  
);

(C)
insert into qz_invoices values (  
  3, date'2018-01-01', date'2018-01-01'  
);

(D)
insert into qz_invoices values (  
  4, date'2018-01-01', date'2018-01-02'  
);

(E)
insert into qz_invoices values (  
  5, date'2018-01-01', date'2019-01-01'  
);

论坛徽章:
1
秀才
日期:2018-05-22 15:26:25
发表于 2018-3-30 10:46 | 显示全部楼层
答案: C, D
A:  判断p0 分区 , value 第1列 < p0 column 第1列 , 直接落入 p0.
B:  判断p0 分区 , value 第1列 = p0 column 第1列 , value 第2列 < p0 column 第2列 , 落入p0.
C:  判断p0 分区 , value 第1列 = p0 column 第1列 , value 第2列 = p0 column 第2列 ,
     判断p1 分区 , value 第1列 = p0 column 第1列 , value 第2列 < p0 column 第2列 , 落入p1.
D:  判断p0 分区 , value 第1列 = p0 column 第1列 , value 第2列 > p0 column 第2列 ,
     判断p1 分区 , value 第1列 = p0 column 第1列 , value 第2列 < p0 column 第2列 , 落入p1.
E:  判断p0 分区 , value 第1列 = p0 column 第1列 , value 第2列 > p0 column 第2列 ,
     判断p1 分区 , value 第1列 = p0 column 第1列 , value 第2列 = p0 column 第2列 ,
     判断p2 分区 , value 第1列 = p0 column 第1列 , 落入p2.

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
 楼主| 发表于 2018-4-3 07:46 | 显示全部楼层
答案CD, 2楼得奖。
A: 两个日期都低于分区P0的分区边界。所以这一行会进入那个分区。
B: raised_datetime的值和分区P0和P1的边界匹配。所以数据库会检查paid_datetime的值。这个值低于P0的边界值(在开票之前就已经支付?!)所以它会进入P0
C: Raised_datetime的值再次和分区P0和P1的边界匹配。但是这次paid_datetime和P0的边界相等。所以这一行进入P1
D: 正如前面两个选项,raised_datetime的值和P0边界匹配。Paid_datetime的值大于P0的边界并且小于P1的边界值。所以这行进入P1
E: Raised_datetime的值再次和分区P0和P1的边界匹配。但是这次paid_datetime和P2的边界相等。所以这一行进入P2

使用道具 举报

回复
论坛徽章:
0
发表于 2018-4-3 17:11 | 显示全部楼层
学习,分区表的知识温习一下

使用道具 举报

回复
求职 : 数据库开发
认证徽章
论坛徽章:
4
林肯
日期:2013-07-30 18:00:55奔驰
日期:2013-08-04 16:30:37奥迪
日期:2013-08-12 12:28:15阿斯顿马丁
日期:2014-01-09 18:07:50
发表于 2018-4-9 11:03 | 显示全部楼层
E: Raised_datetime的值再次和分区P0和P1的边界匹配。但是这次paid_datetime和P2的边界相等。所以这一行进入P2

怎么理解 “但是这次paid_datetime和P2的边界相等,” 不应该是和P1 P2的边界相等吗?

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
 楼主| 发表于 2018-4-10 04:36 | 显示全部楼层
本帖最后由 newkid 于 2018-4-10 04:44 编辑
angu204 发表于 2018-4-9 11:03
怎么理解 “但是这次paid_datetime和P2的边界相等,” 不应该是和P1 P2的边界相等吗?

原文说Once again, the partition boundary matches P0 and P1. But this time paid_datetime equals the partition boundary for P2. So this row goes in P2
我感觉原文是有问题,"Raised_datetime的值"是我自己加上去的。所以总共有两个列,第一个列和P0 和P1边界匹配,第二个列paid_datetime的值虽然和P1边界匹配但分区区间是前闭后开的,所以落入了P2。

使用道具 举报

回复
求职 : 数据库开发
认证徽章
论坛徽章:
4
林肯
日期:2013-07-30 18:00:55奔驰
日期:2013-08-04 16:30:37奥迪
日期:2013-08-12 12:28:15阿斯顿马丁
日期:2014-01-09 18:07:50
发表于 2018-4-10 10:58 | 显示全部楼层
https://docs.oracle.com/cd/B2835 ... tition.htm#CACFIDEG
根据Oracle官方文档 E选项第一列等于P0所以会跳到下一个更高的分区P1,第二列等于P1同样也会调整到更好的分区P2,这两个分区冲突了,所以会选择一个分区大的,因为分区的的是可以兼容分区小的,所以数据会进入到P2分区,不知道我这样理解对不对?

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
 楼主| 发表于 2018-4-10 22:22 | 显示全部楼层
angu204 发表于 2018-4-10 10:58
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm#CACFIDEG
根据Oracle官方文档 E ...

你看的是复合分区,就是两级分区,这个例子只是一级的RANGE分区。
你可以理解为数据先按照这个排序:
ORDER BY raised_datetime, paid_datetime
然后每个分区都有一条上限,数据不能超过那条线。

使用道具 举报

回复
论坛徽章:
11
处女座
日期:2015-07-24 13:55:37天枰座
日期:2016-02-29 09:07:42天蝎座
日期:2016-01-18 09:17:54白羊座
日期:2015-11-19 21:15:42天蝎座
日期:2015-09-23 22:10:02天枰座
日期:2015-09-18 12:58:30秀才
日期:2015-09-09 10:29:36秀才
日期:2015-07-28 09:11:43天蝎座
日期:2015-07-27 10:03:10射手座
日期:2015-07-25 18:06:25
发表于 2018-4-18 21:54 | 显示全部楼层
本帖最后由 bid01 于 2018-4-18 21:56 编辑
newkid 发表于 2018-4-10 22:22
你看的是复合分区,就是两级分区,这个例子只是一级的RANGE分区。
你可以理解为数据先按照这个排序:
O ...

是否可以这么理解, raised_datetime <= 第一列  paid_datetime < 第二列  满足这个条件即可判断落入哪个分区

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
 楼主| 发表于 2018-4-19 07:16 | 显示全部楼层
bid01 发表于 2018-4-18 21:54
是否可以这么理解, raised_datetime

这个条件只能判断出落在当前或者之前的分区。比如题目中P0的数据当然也满足P1, P2的分区边界条件。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表