DBMS_RANDOM.VALUE返回的值等于HIGH值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBMS_RANDOM.VALUE返回的值等于HIGH值相关的知识,希望对你有一定的参考价值。

为什么此返回值在1到5之间?

declare
    v numeric;
begin
    v := dbms_random.value(1, 5);
    DBMS_OUTPUT.PUT_LINE(v);
end;

根据documentation,它应该返回1到4之间的值。

注意:我正在使用Oracle 12c第2版

答案

我认为是因为您使用的不是标准Oracle数据类型numeric。似乎Oracle将其视为integer的同义词。因此,看来Oracle正在四舍五入到最接近的整数。

尝试使用NUMBER,您可能根本看不到5.000000000000。

另一答案

它为您舍入价值。

declare
    v numeric(6,5);
    w numeric;
begin
    v := dbms_random.value(1, 5);
    w := v;
    DBMS_OUTPUT.PUT_LINE(v);
    DBMS_OUTPUT.PUT_LINE(w);
    DBMS_OUTPUT.PUT_LINE(FLOOR(v));
end;
/

一个结果:

dbms_output:
4.92843
5
4
另一答案

其读数小于上限的特定值。

摘自oracle文档:

VALUE函数一个版本返回一个随机数,大于或等于0且小于1,小数点右边为38位数字(38位精度)。其他版本返回随机Oracle数据库NUMBER值x,其中x大于或等于指定的低值,less than the specified high value.

以上是关于DBMS_RANDOM.VALUE返回的值等于HIGH值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle dbms_random随机函数包

oracle中使用DBMS_RANDOM去产生随机数

oracle中使用DBMS_RANDOM去产生随机数

ORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128

dbms_random.value 与下面的代码一起工作正常,除了需要通过分配的字段更改日期

dbms_random.value函数 trunc()函数的用法