Einzelnen Beitrag anzeigen

Benutzerbild von dataspider
dataspider

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

Fehler in Firebird SP Language

  Alt 5. Mai 2023, 08: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