ret = measdb_login();
if(ret)
{
printf("Problems logging onto database !\n");
exit(1);
}
for(;;)
{
ret = RegisterAlert("miniramp_alert"); /* register with ORACLE */
/* the following is a blocking call which waits on the Alert to fire */
ret = WaitOnAlert("miniramp_alert",message);
/* message will contain "MINIRAMP START" or "MINIRAMP STOP" as appropriate. */
printf("Alert Message: %s\n",message);
/* loop and re-register */
}
exit(0);
}
int RegisterAlert(char* AlertName)
{
exec sql begin declare section;
varchar alname[20];
exec sql end declare section;
exec sql declare measure database;
exec sql include sqlca.h;
exec sql whenever sqlerror goto oraerr;
strcpy((char *)alname.arr,AlertName);
alname.len = strlen((char *)alname.arr);
exec sql at measure
execute
begin
dbms_alert.register(:alname);
end;
end-exec;
printf("registered\n");
return 0;
oraerr:
oracle_error( __FILE__, &sqlca);
exec sql whenever sqlerror continue;
exec sql at measure
execute
begin
dbms_alert.remove(AlertName);
end;
end-exec;
return 1;
}
int WaitOnAlert(char *AlertName, char *message)
{
exec sql begin declare section;
varchar almessage[80];
varchar alname[20];
int alstatus;
exec sql end declare section;
exec sql declare measure database;
exec sql include sqlca.h;
exec sql whenever sqlerror goto oraerr;
strcpy((char *)alname.arr,AlertName);
alname.len = strlen((char *)alname.arr);
exec sql at measure
execute
begin
dbms_alert.waitone(:alname,:almessage,:alstatus,300);
/* wait for 300 seconds */
dbms_alert.waitone(:alname,:almessage,:alstatus,86400000); /*or wait for ever */
end;
end-exec;
if(alstatus)
{
printf("alert returned error\n");
}
else
{
almessage.arr[almessage.len] = '\0';
strcpy(message,almessage.arr);
}
return 0;
oraerr:
oracle_error( __FILE__, &sqlca);
exec sql whenever sqlerror continue;
exec sql at measure
execute
begin
dbms_alert.remove(AlertName);
end;
end-exec;
return 1;
}