juha: In Perl SQL-insert/update Abfrage

Hallo Zusammen

In meinem Perl-Programm möchte ich gerne eine Tabelle verändern, entweder soll ein insert stattfinden oder ein update.
Was ist an folgendem Insert-Code falsch?
Stimmt meine update-Abfrage?

grüsse
juha

if($sollstunden eq "0")
{
 print "insert findet statt";

$db_command = "insert into soll
 (
         soll_id,
  soll_monat,
  soll_jahr,
  soll_tage,
  soll_stunden
 )
 values
 (
  1,
  '$monatzaehler',
  '$jahr',
   NULL,
  '@solleingabe[$monatzaehler]'
  )";
 $add = $dbh->do($db_command);
}
else
{
 print "update findet statt!";

update soll
        set soll_stunden = '@solleingabe[$monatzaehler]'
        where soll_id = $sollid;
}

  1. Noch kurz zu erwähnen, es kommt beim insert keine error meldung, die Daten werden einfach nicht in die Datenbank eingetragen!

    cu juha

  2. Hi,

    $add = $dbh->do($db_command);

    Das sieht nach Perl mit DBI::-Interface aus.
    Hat also durchaus Chancen, zu funktionieren.

    update soll
            set soll_stunden = '@solleingabe[$monatzaehler]'
            where soll_id = $sollid;

    Aber was für eine Sprache soll das sein?

    Nach der Optik würde ich SQL sagen - aber was soll das in Deinem
    Perl-Skript?

    Viele Grüße
          Michael

    1. Hallo

      Nach der Optik würde ich SQL sagen - aber was soll das in Deinem
      Perl-Skript?

      Ich möchte von meinem Perl-Programm her eine SQL-Tabelle verändern!
      Darum benutze ich SQL in Perl!

      Aber etwas stimmt nicht, der insert habe ich so ziemlich gleich schon einmal verwendet bei einer Tabelle und dort funktioniert es!

      cu juha

      1. Hallo,

        Nach der Optik würde ich SQL sagen - aber was soll das in Deinem
        Perl-Skript?

        Ich möchte von meinem Perl-Programm her eine SQL-Tabelle verändern!
        Darum benutze ich SQL in Perl!

        Ich denke, Michael meinte damit, daß dieses Update-statement irgendwie 'in der Luft hängt';-)

        Grüße
          Klaus

      2. Hi,

        Nach der Optik würde ich SQL sagen - aber was soll das in Deinem
        Perl-Skript?
        Ich möchte von meinem Perl-Programm her eine SQL-Tabelle verändern!
        Darum benutze ich SQL in Perl!

        Weiter oben benutzt Du das DBI::-Interface für Perl, um SQL-Statements
        an eine Datenbank zu senden. Das funktioniert ja auch.

        Einfach SQL-Statements mitten in den Perl-Code zu schreiben, das funk-
        tionert nicht. Was soll Perl denn damit anfangen?

        Viele Grüße
              Michael

  3. Hallo,

    $db_command = "insert into soll
    (
             soll_id,
      soll_monat,
      soll_jahr,
      soll_tage,
      soll_stunden
    )
    values
    (
      1,
      '$monatzaehler',
      '$jahr',
       NULL,
      '@solleingabe[$monatzaehler]'
      )";
    $add = $dbh->do($db_command);

    in Ermangelung der Tabelledefinition kann ic das so von der Ferne aus nicht ganz nachvollziehen, aber an und für sich schein es in Ordung zu sein.
    Aber Du kannst/sollst natürlich das Ergebnis von 'do' auswerten. Wenn die Funktion undef zurückliefert, daann kannst Du mit $dbh->errstr die zugehörige Fehlermeldung des Datenbanksystems abfragen.

    Außerdem solltest Du $solleingabe[$monatzaehler] anstelle von @solleingabe[$monatzaehler], außer es ist wirklich ein Array, das Du da ansprichst. Siehe dazu auch perldoc perlfaq4, Frage 'What is the difference between $array[1] and @array[1]?'.

    Ach ja, wie ist für Deine Datenbankverbindung die Transaktionslogik eingestellt. Dafür ist das Datenbank-Handle-attribut 'AutoCommit' zuständig, wenn dieses auf 1 gesetzt wird, dann wird jedes Statement, das Du gegen die Datenbank absetzt, auch sofort 'commited', d.h. bestätigt. Andernfalls mußt Du dies mit
    $dbh->commit;
    manuell erledigen, was aber oft enorme Vorteile hat. Da ich nicht weiß, welche Datenbank Du verwendest, solltest Du die Dokumentation des dazugehörigen DBD-Moduls (also z.B. perldoc DBD::mysql) lesen. Dort ist nämlich auch beschrieben, wie das Attribut standardmäßig eingestellt ist.

    Grüße
      Klaus