OracleDataReader GetSpecials_Procedure(OracleConnection currentConnection) 
{
   OracleDataReader myDataReader;
   Object my_DBNull;   try {
      my_DBNull = Convert.DBNull;      //**************************************************************
      //Get List of Specials by calling Procedure 
      //LISTBYSUBJECT_SAMPLE
      //**************************************************************
      //Procedure LISTBYSUBJECT_SAMPLE
      //   (   P_CURSOR OUT NILE_TYPES.NILE_CURSOR,
      //      SUBJECTIDIN INTEGER
      //   )
      //   AS
      //   BEGIN
      //   OPEN P_CURSOR FOR
      //   SELECT BOOKID, BOOKTITLE, AUTHOR, PRICE, RETAIL
      //   FROM PRODUCTS
      //   WHERE SUBJECTID = SUBJECTIDIN
      //   AND ROWNUM <= 5;
      //   END LISTBYSUBJECT_SAMPLE;
      //**************************************************************
      OracleDataReader myReader;
      int subjectidin = 21;
      OracleCommand myCommand = new OracleCommand();
      myCommand.Connection = currentConnection;
      myCommand.CommandType = CommandType.StoredProcedure;
      myCommand.CommandText = "LISTBYSUBJECT_SAMPLE";
      
      //Oracle Procedure Requires RefCursor output parameter
      myCommand.Parameters.Add(new OracleParameter("P_CURSOR", 
OracleType.Cursor, 2000, ParameterDirection.Output, 
true,0,0,"",DataRowVersion.Default, my_DBNull) );         
      myCommand.Parameters.Add(new OracleParameter("SUBJECTIDIN", 
OracleType.Int32, 0, ParameterDirection.Input, 
true,0,0,"",DataRowVersion.Default, my_DBNull) );         
      
      //set SUBJECTIDIN parameter value to 21 (Specials)
      myCommand.Parameters[1].Value = subjectidin;
   
      myDataReader = myCommand.ExecuteReader();      return (myDataReader);
   }   
   catch (OracleException e) {
      throw e;
   }
}