home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1999 May
/
PCWorld_1999-05_cd.bin
/
software
/
Vyzkuste
/
inprise
/
INTRBASE_55
/
EXAMPLES
/
API
/
STAT12.E
< prev
next >
Wrap
Text File
|
1998-10-18
|
3KB
|
128 lines
/*
* Program type: Embedded Static SQL
*
* Description:
* This program utilizes the event mechanism for processing
* newly entered sales orders. It initializes an event called
* "new_order", and then loops waiting for and processing new
* orders as they come in.
*
* When a new sales order is entered, a trigger defined in the
* database posts the "new_order" event. When the program is
* notified of the event, it opens the cursor for selecting all
* orders with status "new". For each fetched order, a transaction
* is started, which changes the order status from "new" to "open
* and takes some action to initiate order processing. After all
* the new orders (if there were more than one) are processed, it
* goes back to waiting for new orders.
*
* To trigger the event, while running this program, run stat12t.
*/
#include "example.h"
#include <stdlib.h>
int process_order PROTO((char *));
EXEC SQL
BEGIN DECLARE SECTION;
EXEC SQL
SET DATABASE empdb = "employee.gdb";
long *t1;
long *t2;
EXEC SQL
END DECLARE SECTION;
int main(ARG(int, argc), ARG(char **, argv))
ARGLIST(int argc)
ARGLIST(char **argv)
{
int ret = 0;
BASED_ON sales.po_number pon;
EXEC SQL
WHENEVER SQLERROR GO TO Error;
EXEC SQL
CONNECT empdb;
/* Go with read committed to see updates */
EXEC SQL
SET TRANSACTION READ COMMITTED;
EXEC SQL
DECLARE get_order CURSOR FOR
SELECT po_number
FROM sales
WHERE order_status = "new"
FOR UPDATE OF order_status;
EXEC SQL
EVENT INIT order_wait empdb ("new_order");
while (!ret)
{
printf("\nStat 12 Waiting ...\n\n");
EXEC SQL
EVENT WAIT order_wait;
EXEC SQL
OPEN get_order;
for (;;)
{
EXEC SQL
FETCH get_order INTO :pon;
if (SQLCODE == 100)
break;
EXEC SQL
UPDATE sales
SET order_status = "open"
WHERE CURRENT OF get_order;
ret = process_order(pon);
}
EXEC SQL
CLOSE get_order;
}
EXEC SQL
COMMIT;
EXEC SQL
DISCONNECT empdb;
exit(0);
Error:
isc_print_sqlerror(SQLCODE, gds__status);
exit(1);
}
/*
* Initiate order processing for a newly received sales order.
*/
int process_order(ARG(char *, pon))
ARGLIST(char * pon)
{
/*
* This function would start a back-ground job, such as
* sending the new orders to the printer, or generating
* e-mail messages to the appropriate departments.
*/
printf("Stat12: Received order: %s\n", pon);
if (!strncmp(pon, "VNEW4", 5))
{
printf ("Stat12: exiting\n");
return 1;
}
return 0;
}