表的列的随机数

时间:2017-03-27 20:53:07

标签: oracle oracle11g oracle10g

我需要生成不在列中的随机数, 你能帮我吗。 该表是MI_TABLA 该列是MI_COLUMNA 非常感谢, 塞尔吉奥

3 个答案:

答案 0 :(得分:1)

您的问题中没有太多细节,但这可能会帮助您走上正轨。

下面的选择获得0到500之间的随机值。我将圆函数放入,以便它是整数。

select round(dbms_random.value(0,500)) val
from dual
where round(dbms_random.value(0,500)) not in (select MI_COLUMNA from MI_TABLA);

如果随机数选择了列中的值,则不会返回任何内容。因此,你可能想把它放在一个循环中,直到你得到一个数字。

答案 1 :(得分:0)

SELECT to_number(to_char(CURRENT_TIMESTAMP,'yyyymmddhh24missffffff'))FROM DUAL

这是一个很长的值,但它不会生成重复的数字。

但它不是随机数。您无需检查值是否存在

答案 2 :(得分:0)

效率低下,但可能会为您介绍一些您需要的概念。

CREATE TABLE a_table (a_column NUMBER);

WITH params AS
       (SELECT 1 min_value,
               1000000 max_value
        FROM   DUAL),
     possible_values AS
       (SELECT ROWNUM + min_value - 1 a_value
        FROM   params
        CONNECT BY ROWNUM <= max_value - min_value + 1)
SELECT a_value
FROM   possible_values
WHERE  NOT EXISTS
         (SELECT 'value in table'
          FROM   a_table
          WHERE  a_table.a_column = a_value)
ORDER BY DBMS_RANDOM.VALUE
FETCH FIRST ROW ONLY;

这样做可以让你为表格指定一系列值,因为&#34;随机数&#34;可以是任何尺寸。然后,它会在表格中找到不是的所有值,然后随机选择其中一个。

对于在该范围内具有大量未使用值的表,它会表现不佳,但对于只有少量未使用值的表会更好。