| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*
- * 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.
- * The contents of this file are subject to the Interbase Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy
- * of the License at http://www.Inprise.com/IPL.html
- *
- * Software distributed under the License is distributed on an
- * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
- * or implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code was created by Inprise Corporation
- * and its predecessors. Portions created by Inprise Corporation are
- * Copyright (C) Inprise Corporation.
- *
- * All Rights Reserved.
- * Contributor(s): ______________________________________.
- */
- #include "example.h"
- #include <stdlib.h>
- int process_order (char *);
- EXEC SQL
- BEGIN DECLARE SECTION;
- EXEC SQL
- SET DATABASE empdb = "employee.fdb";
- long *t1;
- long *t2;
- EXEC SQL
- END DECLARE SECTION;
- int main(int argc, 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(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;
- }
|