Du hast innerhlab eines Codeblocks (alles das, was auf einer Ebene in einer Perl-Datei steht ist ein Codeblock für sich) mehrfach $sth deklaiert, und zwar in Zeile 43,070,56 111 usw.
Entweder, du benennst die Variablen jedesmal anders, z.B. $sth_insert_sth und $sth_select_x, oder du lagster Codestücke in Methoden aus.
Beispiel:
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
# Verbindung zur Datenbank herstellen
my $dbh = DBI->connect(blabla,nimm,mal,dein,passwort,raus);
# Methoden aufrufen, die irgend etwas mit der Datenbank machen.
do_something($dbh);
# jetzt noch was mit Rückgabewert:
my $rv = do_something_else($dbh);
print $rv;
=head1 METHODS
Deine Methoden hier.
=head2 do_someting
Beschreibung, was du machst....
=cut
sub do_someting {
my $dbh = shift;
my $sth = $dbp->prepare(dein statement) or die "fehler...";
my $rv = $sth->...... usw.
} # /do_something
=head2 do_someting_else
Beschreibung, was du machst....
=cut
sub do_someting_else {
my $dbh = shift;
my $sth = $dbp->prepare(dein statement) or die "fehler...";
my $rv = $sth->...... usw.
return "ergebnis";
} # /do_something_else
Edit:
Btw, das Modul
SQL::Abstract bietet sich dir quasi an, und um die Zugangsdaten zu deiner Datenbank aus deinen Skripten heraus zu halten kannst du schön mit
Config::Auto arbeiten.
Hier noch ein schnelles Beispiel:
main.config
#!/perl/bin/perl
my %CONFIG = ();
$CONFIG{dsn} = 'dbi:Oracle:localhost';
$CONFIG{username} = 'testbenutzername';
$CONFIG{password} = 'testpasswort';
\%CONFIG;
dein Programm:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Config::Auto;
my $config = Config::Auto::parse('main.config');
my $dsn = $config->{dsn};
my $username = $config->{username};
my $password = $config->{password};
my $options = { AutoCommit => 1, };
my $dbh = DBI->connect($dsn, $username, $password, $options) or die "cannot connect to db: " . DBI::errstr();
# mach was mit $dbh
$dbh->disconnect();