/************************************************************************/ /* Delete_Datalogger: Deletes Datalogger Information in the HT schema /************************************************************************/ /* Author: Stephane Zuzlewski UC Berkeley Seismological Laboratory stephane@seismo.berkeley.edu Purpose: Modification History: Date Ver Who What --------------------------------------------------------------------- 2003/01/23 1.0 SMZ Initial coding. /************************************************************************/ #ifndef lint static char sccsid[] = "%W% %G% %U%"; #endif #include #include #include #define CONNECT_STRING "user/passwd@db" #define NOMOREROWS 1403 #define VERSION "1.0" #define info stdout char *syntax[] = { "%s version " VERSION " -- Deletes Datalogger Information in the HT schema.", "%s [-h] [-f file] [-i SerialNb]", " where:", " -h Help - prints syntax message.", " -f Specifies file containing datalogger serial numbers.", " -i Specifies a datalogger serial number.", NULL }; /************************************************************************/ EXEC SQL INCLUDE sqlca.h; EXEC SQL BEGIN DECLARE SECTION; char user_pwd[80]; char SerialNb[81]; char SQL_Command[1024]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE sql_stmt STATEMENT; /************************************************************************/ /* External variables and symbols. */ /************************************************************************/ char *cmdname; /* program name from command line. */ long SQLCODE; void sql_error(); /* Handles unrecoverable errors */ /************************************************************************/ /* print_syntax: */ /* Print the syntax description of program. */ /************************************************************************/ int print_syntax (char *cmd, /* program name. */ char *syntax[], /* syntax array. */ FILE *fp) /* FILE ptr for output. */ { int i; for (i=0; syntax[i] != NULL; i++) { fprintf (fp, syntax[i], cmd); fprintf (fp, "\n"); } return (0); } /************************************************************************/ /* main: main program. /************************************************************************/ main (int argc, char *argv[]) { int FlagId = 0; int FlagFile = 0; char IdName[255]; FILE *fId; /* Variables needed for getopt. */ extern char *optarg; extern int optind, opterr; int c; char *p; cmdname = ((p = strrchr(*argv,'/')) != NULL) ? ++p : *argv; /* Parse command line options. */ while ( (c = getopt(argc,argv,"hi:f:")) != -1) switch (c) { case '?': case 'h': print_syntax(cmdname,syntax,info); exit(0); break; case 'i': strcpy (SerialNb, optarg); FlagId = 1; break; case 'f': strcpy (IdName, optarg); FlagFile = 1; break; default: fprintf (info, "Unknown option: -%c\n", c); exit(1); } /* Skip over all options and their arguments. */ argv = &(argv[optind]); argc -= optind; if ((!FlagId) && (!FlagFile)) { print_syntax(cmdname,syntax,info); exit(0); } /* Connect to ORACLE. */ EXEC SQL WHENEVER SQLERROR DO sql_error(); strcpy (user_pwd, CONNECT_STRING); EXEC SQL CONNECT :user_pwd; if (FlagFile) { if ((fId = fopen (IdName, "rt")) == NULL) { printf ("\n Error: couldn't open file %s.\n", IdName); EXEC SQL COMMIT WORK RELEASE; exit (-1); } fscanf (fId, "%s", SerialNb); while (!feof (fId)) { EXEC SQL DELETE FROM DATALOGGER_MODULE WHERE data_id IN (SELECT data_id FROM DATALOGGER WHERE serial_nb = :SerialNb ); EXEC SQL DELETE FROM DATALOGGER_BOARD WHERE data_id IN (SELECT data_id FROM DATALOGGER WHERE serial_nb = :SerialNb ); EXEC SQL DELETE FROM DATALOGGER WHERE serial_nb = :SerialNb; fscanf (fId, "%s", SerialNb); } fclose (fId); } else if (FlagId) { EXEC SQL DELETE FROM DATALOGGER_MODULE WHERE data_id IN (SELECT data_id FROM DATALOGGER WHERE serial_nb = :SerialNb ); EXEC SQL DELETE FROM DATALOGGER_BOARD WHERE data_id IN (SELECT data_id FROM DATALOGGER WHERE serial_nb = :SerialNb ); EXEC SQL DELETE FROM DATALOGGER WHERE serial_nb = :SerialNb; } /* Disconnect from the database. */ EXEC SQL COMMIT WORK RELEASE; exit(0); } /************************************************************************/ /* sql_error: /* Handle errors. Exit on any error. /************************************************************************/ void sql_error() { char msg[512]; size_t buf_len, msg_len; EXEC SQL WHENEVER SQLERROR CONTINUE; buf_len = sizeof(msg); sqlglm(msg, &buf_len, &msg_len); printf("\nORACLE error detected:"); printf("\n%.*s \n", msg_len, msg); EXEC SQL ROLLBACK WORK RELEASE; exit(1); }