Announcement

Collapse
No announcement yet.

Update-Or-Insert- Problem in Interbase

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Update-Or-Insert- Problem in Interbase

    Ich suche für folgendes Problem eine Lösung:
    In einer Tabelle KUNDENZAEHLER, welche die Anzahl der Kunden pro Stunde enthalten soll. Aufbau etwa wie folgt:
    CREATE TABLE KUNDENZAEHLER (
    JAHR integer,
    MONAT integer,
    TAG integer,
    STUNDE INTEGER,
    KUNDEN_ANZAHL integer);
    PRIMARY KEY ( JAHR,MONAT,TAG,STUNDE);

    In dieser Tabelle soll der Inhalt des Feldes KUNDEN_ANZAHL eines evtl. vorhandenen Datensates um 1 erhöht werden, oder ein neuer Datensatz mit den entsprechenden Werten eingefügt werden. Und damit das ganze nicht zu einfach wird, soll dies auch noch mir Interbase- Bordmitteln passieren.

    Die einzige Möglichkeit, die mir bisher eingefallen ist:
    1. Mann führt grundsätzlich ein INSERT mit den aktuellen Daten durch.
    2. Sucht dann mit einem BeforeInsert- Trigger den evtl. schon vorhandenen Datensatz.
    3. aktualisiert die einzufügenden Daten (new....) mit den vorhandenen Daten (new.KundenAnzahl = new.KundenAnzahl+ :KundenAnzahlFound) 4. löscht den vorhandenen Datensatz
    5. läßt mit dem INSERT den neuen Datensatz einfügen.

    Das Ganze scheint mir ein wenig um die Ecke gedacht zu sein. Da Ich glaube, daß dieses Problem häufer auftritt, hat mit Sicherheit schon jemand eine bessere Lösung gefunden!?

    Danke

    Hans H. Fiddelke

  • #2
    Ja besser ist

    1) verpasse deiner Tabelle noch einen "ordentlichen" primary key id, mit einem Integer Feld, den Du über Trigger und Geenrator füllst, dann

    2)
    Verwende eine Stored Procedures der Art
    <pre> Pseudocode es fehlen ein paar Details
    create stored proc (jahr, monat, tag, stunde, kunde)
    declare variable pk integer
    begin
    pk=null;
    select id from tabelle whre jahr=:jahr and .... into pk;
    if (id is null)
    insert into tabelle ...
    else
    update tabelle set .. where id=k;
    end
    </pre&gt

    Comment

    Working...
    X