Mega Code Archive

 
Categories / Oracle PLSQL / PL SQL
 

Package initialization

SQL> SQL> SQL> CREATE OR REPLACE PACKAGE Random AS   2   3    PROCEDURE ChangeSeed(p_NewSeed IN NUMBER);   4   5    FUNCTION Rand RETURN NUMBER;   6   7    PROCEDURE GetRand(p_RandomNumber OUT NUMBER);   8   9    FUNCTION RandMax(p_MaxVal IN NUMBER) RETURN NUMBER;  10  11    PROCEDURE GetRandMax(p_RandomNumber OUT NUMBER,p_MaxVal IN NUMBER);  12  END Random;  13  / Package created. SQL> SQL> CREATE OR REPLACE PACKAGE BODY Random AS   2   3    v_Multiplier  CONSTANT NUMBER := 2;   4    v_Increment   CONSTANT NUMBER := 1;   5   6    v_Seed        number := 1;   7   8    PROCEDURE ChangeSeed(p_NewSeed IN NUMBER) IS   9    BEGIN  10      v_Seed := p_NewSeed;  11    END ChangeSeed;  12  13    FUNCTION Rand RETURN NUMBER IS  14    BEGIN  15      v_Seed := MOD(v_Multiplier * v_Seed + v_Increment,(2 ** 32));  16      RETURN BITAND(v_Seed/(2 ** 16), 32767);  17    END Rand;  18  19    PROCEDURE GetRand(p_RandomNumber OUT NUMBER) IS  20    BEGIN  21      p_RandomNumber := Rand;  22    END GetRand;  23  24    FUNCTION RandMax(p_MaxVal IN NUMBER) RETURN NUMBER IS  25    BEGIN  26      RETURN MOD(Rand, p_MaxVal) + 1;  27    END RandMax;  28  29    PROCEDURE GetRandMax(p_RandomNumber OUT NUMBER,p_MaxVal IN NUMBER) IS  30    BEGIN  31      -- Simply call RandMax and return the value.  32      p_RandomNumber := RandMax(p_MaxVal);  33    END GetRandMax;  34  35  BEGIN  36    ChangeSeed(TO_NUMBER(TO_CHAR(SYSDATE, 'SSSSS')));  37  END Random;  38  / Package body created. SQL>