Function Procedure Packages Oracle PLSQL Tutorial

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>