Ergebnis 1 bis 6 von 6

Thema: OLD.sum(...) ->record "old" has no field "sum"

  1. #1
    Mster ist offline Neuer Benutzer
    Registriert seit
    18.01.2007
    Beiträge
    5

    Frage OLD.sum(...) ->record "old" has no field "sum"

    Hallo,

    ich habe folgende Frage:

    Ist es möglich, bei Update eines Datensatzes (neuer Lagerbestand eines Artikels) zu prüfen, ob die Summe der Bestände einer Artikelgruppe (mehrere Artikel) 0 geworde ist?

    Dazu bräuchte die Argumente:

    OLD.sum(lagerbestand) <> NEW.sum(lagerbestand) and NEW.sum(lagerbestand) = 0

    Ich bekomme dabei aber die Meldung: record "old" has no field "sum"

    Kann ich das irgendwie umgehen?

    Schon mal Danke für die Antwort!

    Mster

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Mster Beitrag anzeigen
    Hallo,

    ich habe folgende Frage:

    Ist es möglich, bei Update eines Datensatzes (neuer Lagerbestand eines Artikels) zu prüfen, ob die Summe der Bestände einer Artikelgruppe (mehrere Artikel) 0 geworde ist?

    Dazu bräuchte die Argumente:

    OLD.sum(lagerbestand) <> NEW.sum(lagerbestand) and NEW.sum(lagerbestand) = 0

    Ich bekomme dabei aber die Meldung: record "old" has no field "sum"

    Kann ich das irgendwie umgehen?

    Schon mal Danke für die Antwort!

    Mster

    Du kannst einen Trigger schreiben, der das prüft, ja.

    Einfach eine Funktion, die das prüft, und als Trigger aufrufen. Was genau hast Du bisher versucht? OLD enthält den Record, der geupdatet wird, NEW die neuen Daten. Du willst aber offensichtlich über mehrere Zeilen (Artikelgruppe) eine Summe bilden, oder?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Mster ist offline Neuer Benutzer
    Registriert seit
    18.01.2007
    Beiträge
    5

    Standard

    ich hab ja schon einen trigger geschrieben. der sieht folgendermassen aus und wirft mir eben den fehler record "old" has no field "sum":

    DECLARE
    t_artikel_gruppe_id int8;
    t_artikel_gruppe_lagerbestand float8;
    BEGIN
    select artikel_gruppe_id, sum(artikel_lagerbestand) into t_artikel_gruppe_id, t_gruppe_artikel_lagerbestand
    from artikel
    where artikel_gruppe_id = 1
    and OLD.sum(artikel_lagerbestand) <> NEW.sum(artikel_lagerbestand)
    and NEW.sum(artikel_lagerbestand) = 0
    group by artikel_gruppe_id;

    IF t_artikel_gruppe_lagerbestand = 0 THEN
    insert into ...
    Return NEW;
    END IF;

    Return NULL;

    END;

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Mster Beitrag anzeigen
    ich hab ja schon einen trigger geschrieben. der sieht folgendermassen aus und wirft mir eben den fehler record "old" has no field "sum":


    END;

    Schnellschuß als Beispiel:

    Code:
    create or replace function _foo() returns trigger as $$
    declare _menge int;
    begin
            select into _menge sum(menge) from foo where artikel_gruppe = OLD.artikel_gruppe;
            if _menge = 0 then
                    raise info '0 erreicht';
            end if;
            return NEW;
    end;
    $$ language plpgsql;
    
    create trigger _foo_trigger after update on foo for each row execute procedure _foo();
    Und die Anwendung:

    Code:
    test=# \i foo.sql
    CREATE FUNCTION
    CREATE TRIGGER
    test=*# select * from foo;
     id | artikel_id | artikel_gruppe | menge
    ----+------------+----------------+-------
      1 |          1 |              1 |    10
      2 |          2 |              1 |     5
      3 |          3 |              2 |     5
    (3 rows)
    
    test=*# update foo set menge = menge -10 where id = 1;
    UPDATE 1
    test=*# update foo set menge = menge -5 where id = 2;
    INFO:  0 erreicht
    UPDATE 1
    test=*#
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Mster Beitrag anzeigen
    ich hab ja schon einen trigger geschrieben. der sieht folgendermassen aus und wirft mir eben den fehler record "old" has no field "sum":


    END;
    Du kannst IMHO nicht mit Aggregatfunktionen (wie sum()) innerhalb einer Rowvariablen arbeiten, das macht auch logisch gesehen nicht wirklich Sinn. Schreib es nach meinem Beispiel um, okay?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    Mster ist offline Neuer Benutzer
    Registriert seit
    18.01.2007
    Beiträge
    5

    Standard

    Spitze! Habs hinbekommen. Danke für die schnelle Hilfe!

    Gruß
    Markus

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 03.02.2012, 09:58
  2. Problem Function geht nicht "invalid input syntax for integer: (0,t,)"
    Von cfi im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 05.09.2008, 08:10
  3. Antworten: 4
    Letzter Beitrag: 16.06.2008, 10:42
  4. "Group-by" und "max" Funktionen verknüpfen
    Von superguddy777 im Forum SQL
    Antworten: 1
    Letzter Beitrag: 22.08.2007, 08:35
  5. record "old" is not assigned yet
    Von daiv im Forum Trigger und Funktionen
    Antworten: 5
    Letzter Beitrag: 14.08.2007, 14:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum