首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle "row_limiting_clause“如何在Oracle12c中为行计数百分比行工作?

Oracle "row_limiting_clause“如何在Oracle12c中为行计数百分比行工作?
EN

Stack Overflow用户
提问于 2015-07-04 17:26:16
回答 1查看 560关注 0票数 2

平台: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行,

代码语言:javascript
复制
no rows selected 

例2当只对前5%行使用row_limiting_clause子句时

代码语言:javascript
复制
1 row as output.

例3当我只对前1%行使用row_limiting_clause子句时

代码语言:javascript
复制
1 row as output.

这意味着案例1!=案例2 0.5!=0.5 ( 10行中的5%)

代码语言:javascript
复制
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:

代码语言:javascript
复制
SQL> select col1 from fetch_test
  2  fetch first 0.5 rows only;

no rows selected

案例2:

代码语言:javascript
复制
SQL> select col1 from fetch_test
  2  fetch first 5 percent rows only;

  COL1                                                                      
  ----                                                                      
     1                                                                      

  1 row selected

案例3:

代码语言:javascript
复制
SQL> select col1 from fetch_test
2  fetch first 1 percent rows only;

COL1                                                                      
----                                                                      
   1  

 1 row selected    

Oracle文档要说的是,

如果行计数包括一个分数,则小数部分被截断。如果行计数为空,则返回0行“来源”

这说明了案例1,但我在上面的示例中找不到对案例2和3的可能解释。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-04 18:37:11

你的观察是正确的。严格阅读Oracle文档表明此行为是正确的:

  • 行计数大小写指定部分被截断。
  • 没有提到百分比被截断。因此,合理的假设是百分比没有被截断。

这似乎是合理的,因为小数行数没有逻辑意义,但小数百分比确实具有逻辑意义。

使用行数指定要返回的行数。行计数必须是计算为数值的数字或表达式。如果指定了负数,则行计数将被视为0。如果行数大于行偏移量+ 1处开始的可用行数,则返回所有可用行。如果行数包括一个分数,则小数部分被截断。如果行计数为NULL,则返回0行。 使用百分比指定要返回的选定行总数的百分比。百分比必须是计算为数值的数字或表达式。如果指定一个负数,则百分比被视为0。如果百分比为NULL,则返回0行。

10002.htm

对于这组特定的数字,我们可以观察到Oracle将10比1的5%打成一圈。

代码语言:javascript
复制
> select 10*.05, round(10*.05) from dual;
10*.05 round(10*.05) 
------ ------------- 
   0.5             1 

里沙比指出,最新情况如下:

余数(在行限制器中使用百分比时)将始终返回整数四舍五入,如http://community.oracle.com/message/13176927#13176927所示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31223349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档