平台:Windows7x-64数据库: Oracle数据库12c企业版发行版12.1.0.2.0 -64位。
Oracle12c中行数百分比的row_limiting_clause是如何工作的?
甲骨文row_limiting_clause的行为很奇怪。在下面的代码中,表"fetch_test“有10行
例1当使用row_limiting_clause时,只有我得到的第一个0.5行,
no rows selected 例2当只对前5%行使用row_limiting_clause子句时
1 row as output.例3当我只对前1%行使用row_limiting_clause子句时
1 row as output.这意味着案例1!=案例2 0.5!=0.5 ( 10行中的5%)
SQL> select * from fetch_test;
COL1 COL2
---- ----
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
10 rows selected.案例1:
SQL> select col1 from fetch_test
2 fetch first 0.5 rows only;
no rows selected案例2:
SQL> select col1 from fetch_test
2 fetch first 5 percent rows only;
COL1
----
1
1 row selected案例3:
SQL> select col1 from fetch_test
2 fetch first 1 percent rows only;
COL1
----
1
1 row selected Oracle文档要说的是,
如果行计数包括一个分数,则小数部分被截断。如果行计数为空,则返回0行“来源”。
这说明了案例1,但我在上面的示例中找不到对案例2和3的可能解释。任何帮助都将不胜感激。
发布于 2015-07-04 18:37:11
你的观察是正确的。严格阅读Oracle文档表明此行为是正确的:
这似乎是合理的,因为小数行数没有逻辑意义,但小数百分比确实具有逻辑意义。
使用行数指定要返回的行数。行计数必须是计算为数值的数字或表达式。如果指定了负数,则行计数将被视为0。如果行数大于行偏移量+ 1处开始的可用行数,则返回所有可用行。如果行数包括一个分数,则小数部分被截断。如果行计数为NULL,则返回0行。 使用百分比指定要返回的选定行总数的百分比。百分比必须是计算为数值的数字或表达式。如果指定一个负数,则百分比被视为0。如果百分比为NULL,则返回0行。
10002.htm
对于这组特定的数字,我们可以观察到Oracle将10比1的5%打成一圈。
> select 10*.05, round(10*.05) from dual;
10*.05 round(10*.05)
------ -------------
0.5 1 里沙比指出,最新情况如下:
余数(在行限制器中使用百分比时)将始终返回整数四舍五入,如http://community.oracle.com/message/13176927#13176927所示。
https://stackoverflow.com/questions/31223349
复制相似问题