Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello monks, I have a script that monitor the log while running sql commands , the script will caputre any Oracle errors and exit however, there is an error that I want to ignore. Since All error start with the word ERROR , I am having a hard time capturing only that one and ignore it. The error I want to ignore the following error:
ERROR at line 1: ORA-00001: unique constraint (TBUSOP_1UQ) violated
Here is what I am doing :
open ( logHndl, "$LogFileNm" ) or die ("Failed to open $LogFileNm"); while(<logHndl>) { # # Ignore the error with uniqe const # next if /^ORA-00001: unique constraint/; # # grep for keyword ERROR or ORA-ERR # push(@errors, grep (/ERROR|ORA-ERR|Fail|Unable/i, $_)); } close(logHndl);
All Oracle errors start with the word ERROR, so it hits the word ERROR first before ORA-00001 .. so what I need only ignoring that error ORA-00001 . Can someone advice please? thanks

Replies are listed 'Best First'.
Re: greping DB ERROR
by tachyon (Chancellor) on Jul 08, 2004 at 23:49 UTC

    The problem is you have data on two lines but you are reading the file in a line at a time. You need to remember your state if you want to do it linewise. There are other ways to do it, possibly with split or by setting $/. Here is an example:

    while(<DATA>){ chomp; if ( m/^ERROR/ ) { $error = 1; push @errors, $_; } else { next unless $error; $error = 0; if ( m/ORA\-00001/ ) { pop @errors; # ignore values and pop off @errors stack; } else { $errors[-1] .= " $_"; # add error string to line msg } } } print "$_\n" for @errors; __DATA__ ERROR at line 2: ORA-00002: blah2 junk line junk line junk line ERROR at line 1: ORA-00001: unique constraint (TBUSOP_1UQ) violated junk line junk line junk line ERROR at line 3: ORA-00003: blah3

    cheers

    tachyon

Re: greping DB ERROR
by chromatic (Archbishop) on Jul 08, 2004 at 21:04 UTC

    I think you're only reading one line at a time from the file when you want to be reading multiple lines. Is there a delimiter between entries in your error log?