0

私は perl を初めて使用します。以下のようなログ ファイルがあります。

SQL> @D:\Luntbuild_Testing\ASCMPK\Files\MAIN\DATABASE\HOST\FILES\DDL\20120412_152632__1_CLTM_EVENT_ACC_ROLE_BLOCK.DDL
SQL> CREATE TABLE CLTM_EVENT_ACC_ROLE_BLOCK
  2  (
  3  EVENT_CODE  VARCHAR2(4) ,
  4  ACC_ROLE  VARCHAR2(20)
  5  )
  6  ;
CREATE TABLE CLTM_EVENT_ACC_ROLE_BLOCK
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object 


SQL> @D:\Luntbuild_Testing\ASCMPK\Files\MAIN\DATABASE\HOST\FILES\DDL\20120412_173845__2_CLTM_EVENT_ACC_ROLE_BLOCK.DDL
SQL> DROP TABLE  CLTM_EVENT_ACC_ROLE_BLOCK;

Table dropped.

ここで、ORA-XXX エラーのあるスクリプト パスのみを表示するスクリプトが必要です。スクリプトは、ORA-xxx エラーに関連付けられた SQL> @D:\Luntbuild_Testing\ のパスのみを表示する必要があります。以下を試してみました。同じことを強化する。

$file = 'c:\data.txt';
open(txt, $file);
while($line = <txt>) {
print "$line" if $line =~ /> @/; #here i want the output to display the path of the script with only ORA-xxx errors and ignore if there are no errors
print "$line" if $line =~ /ORA-/;
}
close(txt); 
4

2 に答える 2

1

マーカーが表示されたらすぐに行を印刷するのではなく> @、変数に格納し、実際にエラーが表示された場合にのみ印刷します。

$file = 'c:\data.txt';
open(txt, $file);
while($line = <txt>) {
$fn = $line if $line =~ /> @/; #here i want the output to display the path of the script with only ORA-xxx errors and ignore if there are no errors
print $fn, $line if $line =~ /ORA-/;
}
close(txt);

また、スクリプトの先頭に 書くことをuse strict;お勧めします。ローカル変数に明示的に名前を付けるように強制します。これにより、スペルミスによる多くのエラーが検出されます。use warnings;use strict;my

于 2012-08-09T11:29:51.963 に答える
1

私はあなたが試したこととかなり似たようなことをします:

$file = 'c:\data.txt';
open(F, $file);
my $last_cmd = '';
while (<F>) {
  $last_cmd = $_ if /^SQL\> \@D:/;
  print $last_cmd if /^ORA-/;
}
于 2012-08-09T11:31:49.823 に答える