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值的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01652: 使用 DBMS_RANDOM.VALUE 时无法在表空间 TEMP 错误中将临时段扩展 128