Thread [DBI] Mehrere aktive Statement-Handler (22 answers)
Opened by barney at 2023-09-23 10:26

barney
 2023-09-25 11:03
#195303 #195303
User since
2008-08-31
119 articles
BenutzerIn
[Homepage] [default_avatar]
Zumindest mit DBD::mysql kann man SQL Befehle innerhalb eines Fetch-Loops präparieren. Was in Produktion ziemlich unsinnig ist. Aber die Situation kann ja entstehen wenn innerhalb der äußeren Schleifen irgendwelche Subs aufgerufen werden die mit der DB reden.

Code: (dl )
1
2
3
4
5
6
7
otobo@21972c404f89:~$ perl nested_prepare.t
deutsch: Österreich
sinhala: ඔස්ට්රියාව
deutsch: Kolumbien
sinhala: කොලොම්බියාව
deutsch: Deutschland
sinhala: ජර්මනිය



Hintergrund meiner Fragen ist dass ich mich wundere warum man in OTRS/Znuny/OTOBO nicht mehrere Abfragen präparieren kann.

Code (perl): (dl )
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
use v5.24;
use strict;
use warnings;
use utf8;

# core modules

# CPAN modules
use DBI;
my $dsn = "DBI:mysql:database=otobo;host=db";
my $dbh = DBI->connect($dsn, 'otobo', 'otobo-docker-databasepw');

$dbh->do( <<'END_SQL' );
CREATE TABLE test_countries (
  country_en VARCHAR(100),
  country_de VARCHAR(100),
  country_si VARCHAR(100)
);
END_SQL

# country translations, sorted by the English name
my @Countries = (
    [ 'Austria',  'Österreich', 'ඔස්ට්රියාව',    1 ],
    [ 'Colombia', 'Kolumbien',   'කොලොම්බියාව', 1 ],
    [ 'Germany',  'Deutschland', 'ජර්මනිය',             1 ],
);

for my $Country ( @Countries ) {

    $dbh->do(
        "INSERT INTO test_countries ( country_en, country_de, country_si ) VALUES (?, ?, ? )",
        undef,
        $Country->@*,
    );
}
my $sel_outer_sth = $dbh->prepare( "SELECT country_de FROM test_countries" );
$sel_outer_sth->execute;
while ( my ($country_de) = $sel_outer_sth->fetchrow_array ) {
    say "deutsch: $country_de";

    my $sel_inner_sth = $dbh->prepare( "SELECT country_si FROM test_countries WHERE country_de = ?" );
    $sel_inner_sth->execute($country_de);
    while ( my ($country_si) = $sel_inner_sth->fetchrow_array ) {
        say "sinhala: $country_si";
    }
}
$dbh->do( 'DROP TABLE test_countries' );

Attachments

Last edited: 2023-10-18 12:20:22 +0200 (CEST)

View full thread [DBI] Mehrere aktive Statement-Handler