Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: Random number generator in plsql

Re: Random number generator in plsql

From: sm <sm_at_No.Spamming>
Date: 1997/08/01
Message-ID: <33e2758f.22811290@newshost.us.oracle.com>#1/1

On Fri, 25 Jul 1997 08:31:38 +0200, Abiy Alemu <abiy_at_biotec.jouy.inra.fr> wrote:

Check this out.

-sm

package random is
/* Linear congruential random number generator */    

/* Returns random integer between [0, r-1] */ function rndint(r in number) return number;    

/* Returns random real between [0, 1] */ function rndflt return number;    

end; /* package random */  

package body random is
/* Linear congruential random number generator */    

m constant number:=100000000;  /* initial conditions */   
m1 constant number:=10000;     /* (for best results) */   
b constant number:=31415821;   /*                    */   
   
a number;                      /* seed */   
   
the_date date;                 /*                             */   
days number;                   /* for generating initial seed */   
secs number;                   /*                             */   
   
/*-------------------------- mult ---------------------------*/   
/* Private utility function */    

function mult(p in number, q in number) return number is

   p1 number;   
   p0 number;   
   q1 number;   
   q0 number;   

begin
   p1:=trunc(p/m1);   
   p0:=mod(p,m1);   
   q1:=trunc(q/m1);   
   q0:=mod(q,m1);   

   return(mod((mod(p0*q1+p1*q0,m1)*m1+p0*q0),m)); end; /* mult */    
/*-------------------------- rndint --------------------------*/   
/* Returns random integer between [0, r-1] */    

function rndint (r in number) return number is begin

   /* generate a random number and set it to be the new seed */    a:=mod(mult(a,b)+1,m);    

   /* convert it to integer between [0, r-1] and return it */    return(trunc((trunc(a/m1)*r)/m1)); end; /* rndint */    

/*-------------------------- rndflt --------------------------*/   
/* Returns random real between [0, 1] */    

function rndflt return number is
begin

   /* generate a random number and set it to be the new seed */    a:=mod(mult(a,b)+1,m);    

   /* return it */
   return(a/m);
end; /* rndflt */       

begin /* package body random */

   /* Generate an initial seed "a" based on system date */

   /* (Must be connected to database.)                  */   
   the_date:=sysdate;
   days:=to_number(to_char(the_date, 'J'));    secs:=to_number(to_char(the_date, 'SSSSS'));    a:=days*24*3600+secs;
end; /* package body random */

>Does someone has a routine which enables me to generate random numbers in
>PLSQL ?
>
>
>|-----------------------------------------------------------------------------|
>| If the only tool you have is a | Abiy Alemu abiy_at_biotec.jouy.inra.fr |
>| hammer, everything in the world | 9, avenue calmels |
>| seems like a nail.____________________| 92270 Bois colombes (France)________|
>
Received on Fri Aug 01 1997 - 00:00:00 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US