PLSQL generate random integer PLSQL generate random integer sql sql

PLSQL generate random integer


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; 


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.

As pointed out by q3kep and GolezTrol, dbms_random.value(x, y) provides a uniform random distribution for values greater than or equal to x and less than y. So either of the following would be appropriate:

select trunc(dbms_random.value(1,11)) from dual

or

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

As per documentation


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