Previous Topic

Next Topic

Manage

The manage step provides data management functionality for your application and/or process.

Below is the code for Manage():

/*
 * Manage()
 *
 * Populates table and perform a simple query
 *
 */
void Manage(void)
{
EXEC SQL BEGIN DECLARE SECTION;
   CHAR  custname[47+1];
   FLOAT total;
EXEC SQL END DECLARE SECTION;

   os_printf(DH_STRING_LITERAL("MANAGE\n"));

   /* populate the tables with data */
   Add_CustomerMaster_Records();
   Add_CustomerOrders_Records();
   Add_OrderItems_Records();
   Add_ItemMaster_Records();

   /* perform a query:
      list customer name and total amount per order

      name               total
      @@@@@@@@@@@@@      $xx.xx

      for each order in the CustomerOrders table
         fetch order number
         fetch customer number
         fetch name from CustomerMaster table based on customer number
         for each order item in OrderItems table
            fetch item quantity
            fetch item number
            fetch item price from ItemMaster table based on item number
         next
      next
   */
   os_printf(DH_STRING_LITERAL("\n\tQuery Results\n"));

   /* declare cursor for fetching orders */
   EXEC SQL DECLARE curs CURSOR FOR 
      SELECT cm_custname, SUM(im_itempric * oi_quantity)
         FROM custmast, custordr, ordritem, itemmast
         WHERE co_custnumb = cm_custnumb AND co_ordrnumb = oi_ordrnumb AND oi_itemnumb = im_itemnumb
         GROUP BY cm_custnumb, cm_custname;
   if (sqlca.sqlcode)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);			

	EXEC SQL OPEN curs;
   if (sqlca.sqlcode)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);			

	while (1) 
	{
      /* for each order in the CustomerOrders table */
		EXEC SQL FETCH curs INTO :custname, :total;
      if (sqlca.sqlcode == SQL_NOT_FOUND)
         break;
      else if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
               
      /* output data to stdout */
      os_printf(DH_STRING_LITERAL("\t\t%-20s %.2f\n"), custname, total);
	}

 	EXEC SQL CLOSE curs ;
}


/*
 * Delete_Records()
 *
 * This function deletes all the records in the table
 */
void Delete_Records(dh_char_t* table)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char  sCommand[512];
EXEC SQL END DECLARE SECTION ;
   os_printf(DH_STRING_LITERAL("\tDelete records…\n"));

   os_sprintf (sCommand, DH_STRING_LITERAL("DELETE FROM %s"), table);
   EXEC SQL EXECUTE IMMEDIATE :sCommand ;
   if (sqlca.sqlcode < 0)
      Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);

   EXEC SQL COMMIT WORK ;
}


/*
 * Add_CustomerMaster_Records()
 *
 * This function adds records to table CustomerMaster from an
 * array of strings
 */
void Add_CustomerMaster_Records(void)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char		sCommand[512];
EXEC SQL END DECLARE SECTION ;
   dh_char_t	*data[] = {
      DH_STRING_LITERAL("('1000','92867','CA','1','Bryan Williams','2999 Regency','Orange')"),
      DH_STRING_LITERAL("('1001','61434','CT','1','Michael Jordan','13 Main','Harford')"),
      DH_STRING_LITERAL("('1002','73677','GA','1','Joshua Brown','4356 Cambridge','Atlanta')"),
      DH_STRING_LITERAL("('1003','10034','MO','1','Keyon Dooling','19771 Park Avenue','Columbia')")
   };
   int		i;
   int		nRecords = sizeof(data) / sizeof(data[0]);

   Delete_Records(DH_STRING_LITERAL("custmast"));

   os_printf(DH_STRING_LITERAL("\tAdd records in table CustomerMaster…\n"));

   /* add one record at time to table */
   for (i = 0; i < nRecords; i++)
   {
      os_sprintf (sCommand, DH_STRING_LITERAL("INSERT INTO custmast VALUES %s"), data[i]);

      EXEC SQL EXECUTE IMMEDIATE :sCommand ;
      if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
   }

   EXEC SQL COMMIT WORK;
}


/*
 * Add_CustomerOrders_Records()
 *
 * This function adds records to table CustomerOrders from an
 * array of strings
 */
void Add_CustomerOrders_Records(void)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char		sCommand[512];
EXEC SQL END DECLARE SECTION ;
   dh_char_t	*data[] = {
      DH_STRING_LITERAL("('09/01/2002','09/05/2002','1','1001')"),
      DH_STRING_LITERAL("('09/02/2002','09/06/2002','2','1002')")
   };
   int		i;
   int		nRecords = sizeof(data) / sizeof(data[0]);

   Delete_Records(DH_STRING_LITERAL("custordr"));

   os_printf(DH_STRING_LITERAL("\tAdd records in table CustomerOrders…\n"));

   /* add one record at time to table */
   for (i = 0; i < nRecords; i++)
   {
      os_sprintf (sCommand, DH_STRING_LITERAL("INSERT INTO custordr VALUES %s"), data[i]);

      EXEC SQL EXECUTE IMMEDIATE :sCommand ;
      if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
   }

   EXEC SQL COMMIT WORK;
}


/*
 * Add_OrderItems_Records()
 *
 * This function adds records to table OrderItems from an
 * array of strings
 */
void Add_OrderItems_Records(void)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char		sCommand[512];
EXEC SQL END DECLARE SECTION ;
   dh_char_t	*data[] = {
      DH_STRING_LITERAL("(1,2,'1','1')"),
      DH_STRING_LITERAL("(2,1,'1','2')"),
      DH_STRING_LITERAL("(3,1,'1','3')"),
      DH_STRING_LITERAL("(1,3,'2','3')")
   };
   int		i;
   int		nRecords = sizeof(data) / sizeof(data[0]);

   Delete_Records(DH_STRING_LITERAL("ordritem"));

   os_printf(DH_STRING_LITERAL("\tAdd records in table OrderItems…\n"));

   /* add one record at time to table */
   for (i = 0; i < nRecords; i++)
   {
      os_sprintf (sCommand, DH_STRING_LITERAL("INSERT INTO ordritem VALUES %s"), data[i]);

      EXEC SQL EXECUTE IMMEDIATE :sCommand ;
      if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
   }

   EXEC SQL COMMIT WORK;
}


/*
 * Add_ItemMaster_Records()
 *
 * This function adds records to table ItemMaster from an
 * array of strings
 */
void Add_ItemMaster_Records(void)
{
EXEC SQL BEGIN DECLARE SECTION ;
   char		sCommand[512];
EXEC SQL END DECLARE SECTION ;
   dh_char_t	*data[] = {
      DH_STRING_LITERAL("(10,19.95,'1','Hammer')"),
      DH_STRING_LITERAL("(3,  9.99,'2','Wrench')"),
      DH_STRING_LITERAL("(4, 16.59,'3','Saw')"),
      DH_STRING_LITERAL("(1,  3.98,'4','Pliers')")
   };
   int		i;
   int		nRecords = sizeof(data) / sizeof(data[0]);

   Delete_Records(DH_STRING_LITERAL("itemmast"));

   os_printf(DH_STRING_LITERAL("\tAdd records in table ItemMaster...\n"));

   /* add one record at time to table */
   for (i = 0; i < nRecords; i++)
   {
      os_sprintf (sCommand, DH_STRING_LITERAL("INSERT INTO itemmast VALUES %s"), data[i]);

      EXEC SQL EXECUTE IMMEDIATE :sCommand ;
      if (sqlca.sqlcode)
         Handle_Error(sqlca.sqlcode, sqlca.sqlerrm);
   }

   EXEC SQL COMMIT WORK;
}