AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler in Firebird SP Language
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler in Firebird SP Language

Ein Thema von dataspider · begonnen am 5. Mai 2023 · letzter Beitrag vom 5. Mai 2023
 
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#1

Fehler in Firebird SP Language

  Alt 5. Mai 2023, 07:32
Datenbank: Firebird • Version: 3 • Zugriff über: IBExpert
Ich bin jetzt schon einige Male darüber "gestolpert".
Ich habe eine Stored Procedure:

SQL-Code:
create or alter procedure berechne_sachkonto_lbd
as
declare variable id integer$;
declare variable nummer type of dnr;
declare variable datum$ date$;
declare variable datum date$;
begin
  -- letztes Buchungsdatum eintragen
  for select
      k.nummer
    , k.letztes_buchungsdatum
      from sachkonto k
      into
      :nummer
    , :datum$
      as cursor cur
  do
  begin
    datum = null; -- Variable wird nicht NULL, wenn kein Datensatz existiert, sondern behaelt letzten Wert
    select first 1 b.buchungsdatum from kostenbuchung b
           where b.sachkonto = :nummer
           order by b.buchungsdatum desc
           into :datum;
    if (:datum is distinct from :datum$) then
      update sachkonto k
             set k.letztes_buchungsdatum = :datum
             where current of cur;
  end
end
Die Variable Datum wird nur gesetzt, wenn das Statement "select first 1 b.buchungsdatum from kostenbuchung b ..." einen Datensatz findet.
Gibt es keinen Datensatz mit der Bedingung, behält die Variable Datum den letzten Wert bei, wenn ich diese nicht vorher mit NULL initialisiere.
Dadurch stehen in der Tabelle sachkonto dann falsche Werte drin, wenn es gar keinen Buchungssatz gibt.
Deshalb muss ich immer darauf achten, die Variablen vor dem Statement mit NULL zu initialisieren.

Wenn ich ein Select in eine Variable (into :datum) ausführe und das select liefert NULL, dann erwarte ich auch ein NULL in der Variable.

Ich halte das für einen Bug, oder liege ich da falsch.
Sollte ich bei Firebird einen Bug - Eintrag machen?

Danke

Frank
Frank Reim
  Mit Zitat antworten Zitat
 


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 11:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz