PRAGMA Question

From: Scott Humphrey <xsah1_at_sunyit.edu>
Date: 1996/11/26
Message-ID: <E1HIvL.78E_at_sunyit.edu>#1/1


I need some help regarding pragmas. I keyed a program directly from the Oracle PL/SQL Programming book for generating random numbers as follows:

CREATE OR REPLACE PACKAGE RANDOM AS   PROCEDURE ChangeSeed(p_NewSeed IN NUMBER);   

  FUNCTION Rand RETURN NUMBER;
  PRAGMA RESTRICT_REFERENCES(rand,WNDS);   

  PROCEDURE GetRand(p_RandomNumber OUT NUMBER);   

  FUNCTION RandMax(P_MaxVal IN NUMBER) RETURN NUMBER;   PRAGMA RESTRICT_REFERENCES(RandMax,WNDS);   

  PROCEDURE GetRandMax(p_RandomNumber OUT NUMBER,

                       p_MaxVal IN NUMBER);
END Random;
/

CREATE OR REPLACE PACKAGE BODY RANDOM AS

 v_Multiplier CONSTANT NUMBER := 22695477;
 v_Increment  CONSTANT NUMBER := 1;
 v_seed number := 1;

 Procedure ChangeSeed(p_NewSeed IN NUMBER) IS  BEGIN
  v_seed := p_newSeed;
 END ChangeSeed;

 FUNCTION Rand RETURN NUMBER IS
 BEGIN
  v_seed := MOD(v_multiplier * v_seed + v_increment,(2 ** 32));   RETURN BITAND (v_seed/(2 ** 16), 32767);  END Rand;

 PROCEDURE GetRand (p_RandomNumber OUT NUMBER) IS  BEGIN
  p_randomNumber := Rand;
 END GetRand;  

 FUNCTION RandMax (p_MaxVal IN NUMBER) RETURN NUMBER IS  BEGIN
   RETURN MOD (Rand,p_MaxVal) + 1;
 END RandMax;

 PROCEDURE GetRandMax(p_RandomNumber OUT NUMBER,

                     p_MaxVal IN NUMBER) IS
 BEGIN
  p_RandomNumber := RandMax(P_MaxVal);
 END GetRandMax;

BEGIN
 ChangeSeed(TO_NUMBER(TO_CHAR(SYSDATE,'SSSSS'))); END Random;
/

This gives me the error

PLS-00452 'rand' violates its associated pragma.

Can someone explain why I get these pragma errors despite copying it right from the Oracle Press book.

Thanks,

Scott Humphrey
Senior Programmer Analyst
xsah1_at_sunyit.edu Received on Tue Nov 26 1996 - 00:00:00 CET

Original text of this message