AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [PLSQL] Gibt es ein "Select oder Insert"- Befehl?

[PLSQL] Gibt es ein "Select oder Insert"- Befehl?

Ein Thema von sirius · begonnen am 5. Jul 2010 · letzter Beitrag vom 7. Jul 2010
 
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#19

AW: [PLSQL] Gibt es ein "Select oder Insert"- Befehl?

  Alt 6. Jul 2010, 13:12
Hallo Sirius,

hier ein Entwurf. Da mir der Context fehlt kann ich natürlich nichts testen. Was mir besser gefällt ist, das im Fall, wenn die Channel-Daten schon gespeichert wurden nur einmal die Tabelle dbt_channel abgefragt wird. Der Rest beruht eher darauf, das ich keine Sorgen bei der Verwendung von Exceptions habe, aber vielleicht fehlen mir da auch nur die schlechten Erfahrungen.

SQL-Code:
BEGIN
  LOOP
    BEGIN
      -- ChannelID suchen
      select ID into ChannelID from
        dbt_channel
      where
        ID_Characteristic=CharacteristicID
        and ID_BaseIndicator=BaseIndicatorID
        and ID_Indicator=IndicatorID
        and ID_Phase=PhaseID
        and ID_Unit=UnitID
        and ID_Interval=IntervalID
        and Frequency=aFrequency;
        
      if aDoInsert THEN
        -- existiert, sollte aber nicht
        RaiseAlreadyExist('Channel');
      end if;
     
      -- ansonsten sind wir fertig
      RETURN ChannelID;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        -- Channel-Daten noch nicht angelegt
        
        if not aDoInsert THEN
          -- sollten aber angelegt sein
          RaiseNotExist('Channel');
        end if;
        
        BEGIN
          insert into dbt_Channel (
            Id_Characteristic, Id_Phase, Id_Indicator, id_Unit, Id_Interval, Frequency, Id_Baseindicator
          ) values (
            CharacteristicID, PhaseID, IndicatorID, UnitID, IntervalID, aFrequency, BaseIndicatorID
          ) returning ID into ChannelID;
          commit;
          
          RETURN ChannelID;
        EXCEPTION
          when dup_val_on_index then
            NULL; -- den Datensatz gibt es doch schon, alles von vorne
        END;
    END;
  END LOOP;
END;
Da ich nicht weiß wie du ChannelID verwendest, bleibt der Verdacht, dass auch diese Tabelle überflüssig seinen könnte. Diese Tabelle scheint mir wie die DBT_ZEIT Tabelle eine Gruppierung darzustellen, die man auch aus den Daten gewinnen könnte wenn man statt der ChannelID die sieben anderen Werte abspeichern würde. Aber ich weiß natürlich nicht wie viele Datensätze anderer Tabellen von der ChannelID abhängen oder wie teuer es ist, die Gruppierung live aus den von ChannelID abhängigen Daten zu ziehen.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz