PLSQL generate random integer

我们两清 提交于 2020-01-01 03:37:21

问题


In Oracle Sql developer 11g, how do I generate a random integer and assign it to a variable? This is what I've tried so far:

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

With this code I got error:

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

What is the proper way to solve my issue?


回答1:


Variables require PL/SQL; it's not clear from your question whether your code is a proper PL/SQL block. In PL/SQL variables are populated from queries using the INTO syntax rather than the assignment syntax you're using.

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;

Although, you don't need to use the query syntax. This is valid, and better practice:

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



回答2:


Alternatively, You can create a function for generating random numbers. This can be used in anywhere in the code.

    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;
    /

OUTPUT:

Function created.

SQL> select Random from dual;

RANDOM

     6                                                                                                                  

SQL> select Random from dual;

RANDOM

     9                                                                                                                  



回答3:


If you want to get a random number of n digits you can do this

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;



回答4:


For a set of consecutive integers randomly distributed uniformly (in the example below between 1 and 10), I suggest:

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

Otherwise I'll unintentionally restrict the first and last number in the set to half the probability of being chosen as the rest of the set.




回答5:


Integers:

select dbms_random.random from dual

Positive integers:

select abs(dbms_random.random) from dual



回答6:


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 Gives the random value within the range.



来源:https://stackoverflow.com/questions/30417788/plsql-generate-random-integer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!