Leser: 26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbname = 'xxx'
my $user = 'xxxxxx'
my $passwd = 'xxxx'
my $dbh = DBI->connect('DBI:Oracle:$dbname', '$user', '$passwd')
or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare("select TABLESPACE_NAME, FILE_NAME, BYTES, MAXBYTES from dba_data_files where FILE_NAME like '%sapdata%' order by TABLESPACE_NAME")
or die "Couldn't prepare statement: " . $dbh->errstr;
my @data;
$sth->execute
or die "Couldn't execute statement: " . $sth->errstr;
while (@data = $sth->fetchrow_array) {
print "$data[0]\n";
}
$sth->finish;
$dbh->disconnect;
2009-09-16T12:55:54 lordsirkendorfIch möchte aber dahin, dass ich mir mit print "$data[0]\n"; NUR das erste Feld der ersten Zeile ausgeben lassen kann. Mit print "$data[0][0][0][0]\n"; NUR das letzte Feld der ersten Zeile usw.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
use strict; use warnings; use Data::Dumper; my @data; # Tabelle füllen # zum Verständnis unwichtig # nur damit man was zum bearbeiten hat @data=map{$_=[split(/\s+/,$_)]}split(/\n/,<<EOT); PSAPSOURCEI /oracle/CS6/sapdata2/sourcei_1/sourcei.data1 4341104640 31457280000 PSAPSOURCEI /oracle/CS6/sapdata4/sourcei_2/sourcei.data2 3460300800 5242880000 PSAPSTABD /oracle/CS6/sapdata4/stabd_2/stabd.data2 24641536000 31457280000 PSAPSTABD /oracle/CS6/sapdata5/stabd_3/stabd.data3 24704450560 31457280000 EOT # wie sieht das aus: # "Dumper" gibt die Datenstruktur aus print Dumper(\@data)."\n"; # Zugriff auf das Feld in der ersten Zeile in der ersten Spalte: print $data[0][0]."\n"; # Zugriff auf das Feld in die dritten Zeile in der letzte Spalte: print $data[2][-1]."\n"; # Zugriff auf das Feld letzte Zeile, dritte Spalte: print $data[-1][2]."\n"; # Zugriff auf das Feld zweite Zeile, zweite Spalte: print $data[1][1]."\n"; # alle Werte aus der ersten Spalte: for my $line (@data) { print $line->[0]."\n"; } # alle Werte aus der letzten Spalte in ein neues Array my @last_colomn; for my $line (@data) { push(@last_colomn, $line->[-1]); } # alle Werte der vorletzten Spalte aufaddieren: my $summ=0; for my $line (@data) { $summ+=$line->[-2]; } print "$summ\n";
2009-09-16T13:27:03 lordsirkendorfWarum vergleichst du die Tabellen nicht mit SQL? Auch das Subtrahieren und Addieren von Werten könnte die Datenbank übernehmen.Später möchte ich dann nämlich die einzelnen Tablespaces miteinander vergleichen und gegebenenfalls von einander subtrahieren und die einzelnen Differenzen am Schluss aufaddieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
my @sorcefiles; my @tablefiles; while (@data = $sth->fetchrow_array) { push(@sorcefiles,\@data) if($data[0] eq 'PSAPSOURCEI'); push(@tablefiles,\@data) if($data[0] eq 'PSAPSTABD'); } for my $line (@tablefiles) { $line->[1]=~m!^(.+sapdata\d+/)!; my $path=$1; my @sources; for my $file (@sorcefiles) { push(@sources,$file) if($file->[1]=~/\Q$path\E/); } my $filesum=0; for my $file (@sources) { $filesum+=-s $file->[1]; } my $sum=$line->[-1]-$line->[-2]; if($sum-$filesum < 10) { # mach was ... } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbh = DBI->connect('DBI:Oracle:xxx', 'xxxxxx', 'xxxxx')
or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare("select TABLESPACE_NAME, FILE_NAME, BYTES, MAXBYTES from dba_data_files where FILE_NAME like '%sapdata2%' order by TABLESPACE_NAME")
or die "Couldn't prepare statement: " . $dbh->errstr;
my @data;
$sth->execute
or die "Couldn't execute statement: " . $sth->errstr;
###hier befülle ich das Array spaltenweise und überprüfe mit print, ob ich in der richtigen Spalte bin:
while (@data = $sth->fetchrow_array) {
print "$data[2]\n";
}
#hiermit möchte ich dann die einzelnen numerischen Werte aus der 3. Spalte des Arrays miteinander addieren. Als Ergebnis erhalte ich aber immer 0 und keine Fehlermeldungen:
my @column;
for my $line (@data)
{
push(@column, $line->[2]);
}
my $summ=0;
for my $line (@data)
{
$summ+=$line->[2];
}
print "$summ\n";
1 2 3 4 5
my @data; while (my @line = $sth->fetchrow_array) { print "$line[2]\n"; push @data, [ @line ]; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#!/usr/bin/perl -w use strict; use DBI; use Data::Dumper; my $dbname = 'xxx' my $user = 'xxxxxx' my $passwd = 'xxxx' my $dbh = DBI->connect('DBI:Oracle:$dbname', '$user', '$passwd') or die "Couldn't connect to database: " . DBI->errstr; my $sth = $dbh->prepare("select TABLESPACE_NAME, FILE_NAME, BYTES, MAXBYTES from dba_data_files where FILE_NAME like '%sapdata%' order by TABLESPACE_NAME") or die "Couldn't prepare statement: " . $dbh->errstr; my @data; $sth->execute or die "Couldn't execute statement: " . $sth->errstr; while (my @line = $sth->fetchrow_array) { push(@data,\@line); } # # alternativ: #while (my $lineref = $sth->fetchrow_arrayref) { # push(@data,$lineref); #} # # oder: # @data=$sth->fetchall_array(); $sth->finish; $dbh->disconnect; print Dumper(\@data);