PLSQL生成随机整数

时间:2015-05-23 21:29:03

标签: sql oracle plsql oracle11g oracle-sqldeveloper

在Oracle Sql developer 11g中,如何生成随机整数并将其分配给变量?这是我到目前为止所尝试的:

S_TB := SELECT dbms_random.value(1,10) num FROM dual;

使用此代码我收到错误:

S_TB := SELECT dbms_random.value(1,10) num FROM dual
Error report -
Unknown Command

解决问题的正确方法是什么?

6 个答案:

答案 0 :(得分:14)

变量需要PL / SQL;从您的问题中不清楚您的代码是否是正确的PL / SQL块。在PL / SQL中,使用INTO语法而不是您正在使用的赋值语法从查询中填充变量。

declare
    txt varchar2(128);
    n pls_integer;
begin
    --  this is how to assign a literal
    txt := 'your message here';

    --  how to assign the output from a query
    SELECT dbms_random.value(1,10) num 
    into n
    FROM dual;

end;

虽然,您不需要使用查询语法。这是有效的,也是更好的做法:

declare
    n pls_integer;
begin
    n := dbms_random.value(1,10);
end; 

答案 1 :(得分:5)

或者,您可以创建用于生成随机数的函数。 这可以在代码中的任何地方使用。

    create or replace function RANDOM
    return number 
    is 
    a number ; 
    begin
    select round(dbms_random.value(1,10)) rnum
    into a 
    from dual;
    return a  ;
    end;
    /

输出:

创建的功能。

SQL>从双重中选择随机;

RANDOM

     6                                                                                                                  

SQL>从双重中选择随机;

RANDOM

     9                                                                                                                  

答案 2 :(得分:4)

如果你想获得一个随机数的n位数,你可以这样做

CREATE OR REPLACE FUNCTION NUM_RANDOM(N IN NUMBER)
RETURN NUMBER 
AS 
BEGIN
    RETURN TRUNC (DBMS_RANDOM.VALUE(POWER(10, N - 1), POWER(10, N) - 1));
END NUM_RANDOM;

答案 3 :(得分:3)

对于一组随机均匀分布的连续整数(在下面的例子中介于1和10之间),我建议:

select round(dbms_random.value(0.5,10.49999999999),0) from dual

否则我会无意中将集合中的第一个和最后一个数字限制为被选为集合其余部分的概率的一半。

答案 4 :(得分:1)

整数:

select dbms_random.random from dual

正整数:

select abs(dbms_random.random) from dual

答案 5 :(得分:0)

DECLARE
l_check Integer:=1;
BEGIN
    WHILE l_check < 5 LOOP
        l_check := DBMS_RANDOM.VALUE(1,10);
        DBMS_OUTPUT.PUT_LINE(l_check);
    END LOOP;
END;

- DBMS_RANDOM.VALUE给出范围内的随机值。