Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Procedure liefert null (https://www.delphipraxis.net/192588-firebird-procedure-liefert-null.html)

Jumpy 3. Mai 2017 12:43

AW: Firebird Procedure liefert null
 
Zitat:

Zitat von Delix (Beitrag 1369996)
Wenn ich im Select die Datenmenge weiter beschränke, wird ein Wert zurückgegeben, so wie der Select jetzt steht ergibt er null. Im Protokoll ist in allen Fällen alles richtig und vollständig.

Kannst du die Beschränkung dann nicht einmal invertieren und sehen, ob dann auch null rauskommt, um so dem Übeltäter auf die Spur zu kommen?

p80286 3. Mai 2017 13:43

AW: Firebird Procedure liefert null
 
Also die Null-Werte können wir vergessen da
SQL-Code:
  AND ar.Aktiv='J'
das [CODE=] AND ar.Aktiv is not null [/CODE] impliziert, warum dann ein LEFT JOIN ist mir auch nicht klar.

das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.

was bedeutet
Zitat:

Wenn ich im Select die Datenmenge weiter beschränke
im allg. beschränkst Du nicht die Menge sondern den Inhalt??

und was steht in Deinem Protokoll?
könnte es sein, das NULL-Sätze in der Anzeige unter den Tisch fallen?

gruß
K-H

Lemmy 3. Mai 2017 13:57

AW: Firebird Procedure liefert null
 
Zitat:

Zitat von p80286 (Beitrag 1370034)

das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.

und wie kommt dann das Ergebnis zum Client wenn nicht mit suspend?

bnreimer42 3. Mai 2017 14:59

AW: Firebird Procedure liefert null
 
Zitat:

Zitat von p80286 (Beitrag 1370034)
das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.

Nein, Suspend ist korrekt, denn damit werden die Ergebnisse an den Client gesendet, wenn er es denn nach dem SELECT wirklich abruft.

p80286 3. Mai 2017 15:42

AW: Firebird Procedure liefert null
 
Ich hab meine Weisheit von hier.
Zitat:

If the procedure is called from a EXECUTE PROCEDURE statement, then SUSPEND has the same effect as EXIT. This usage is legal, but not recommended.
Dann ist da wohl in der Zwischenzeit die Toleranz größer geworden?

Gruß
K-H

bnreimer42 3. Mai 2017 16:08

AW: Firebird Procedure liefert null
 
Zitat:

Zitat von p80286 (Beitrag 1370059)
Ich hab meine Weisheit von hier.
Zitat:

If the procedure is called from a EXECUTE PROCEDURE statement, then SUSPEND has the same effect as EXIT. This usage is legal, but not recommended.
Dann ist da wohl in der Zwischenzeit die Toleranz größer geworden?

Deshalb wäre es wichtig zu wissen, wie der Aufruf der Proc erfolgt.

Wenn die mit SELECT * FROM PROC aufgerufen wird, ist SUSPEND nötig. Und da die Proc einen Rückgabewert hat, lässt ein aktueller Firebird keine Proc ohne Suspend mehr zu.

hoika 3. Mai 2017 16:58

AW: Firebird Procedure liefert null
 
Hallo,

1.
INSERT INTO DBPROC(PROCNAME, ZEIT, WERT) VALUES ('P_GETLAGERWERT','NOW',
:LGNR||';'||:ARTNR||';'||:BESTAND||';'||:BEST_OHNE _RECHNUNG||';'||:LE_EK||';'||:ART_WERT||';'||:LGWE RT);

Kannst du das Ändern erweitern mit

if LGWERT is NULL

INSERT INTO DBPROC(PROCNAME, ZEIT, WERT) VALUES ('P_GETLAGERWERT','NOW',
:LGNR||';'||:ARTNR||';'||:BESTAND||';'||:BEST_OHNE _RECHNUNG||';'||:LE_EK||';'||:ART_WERT||';'||"NULL ")
else
das Original


Und du hast definitiv in DBProc als letzten Wert einen gültigen Wert drin?

2,
Was mich noch stutzig macht sind Deine verschiedenen Numeric(x,y)-Variablen,
probier mal komplett Double Precision.
Ab einem bestimmten Numeric(x,y) arbeitet Firebird automatisch mit Integer weiter ...

3.
es wird NULL oder 0 zurückgegeben?
Woher weisst du das?
Hast du die Query (Select * From Proc(xxx)) mal in IBExpert laufen lassen?

MichaelT 3. Mai 2017 17:09

AW: Firebird Procedure liefert null
 
Kurz mal durchgetestet.

LE_EK kleiner gleich 0 ist dann wird LE_EK NULL über ART_EKNETTO.

Alles andere kann ich so nicht sagen.

Reproduktion war einfach die Prozedur und alles NULL gesetzt. Erst wenn ich ART_EKNETTO auf 0 setzt wird das Ergebnis NOT NULL.

Ist nicht zwingend überraschend.


Zitat:

Zitat von Delix (Beitrag 1369963)

Schönen Gruß


MichaelT 3. Mai 2017 17:46

AW: Firebird Procedure liefert null
 
Eine Leerzeile vermutlich.

Zitat:

Zitat von hoika (Beitrag 1370075)
Hallo,


hoika 3. Mai 2017 19:04

AW: Firebird Procedure liefert null
 
Hallo,
Leerzeile?

aber mal weiter

Zitat:

Die Procedure läuft intern absolut korrekt ab. Das habe ich aus der Procedure heraus protokolliert. Die Rückgabe-Variable ist bis zum Schluss absolut korrekt berechnet! Da fallen joins's oder Nullwerte wohl aus.
Mach mal vorm Suspend ein LGWERT=21.0;
Und dahinter noch einen Protokolleintrag.

Kommt jetzt immer noch NULL raus als Ergebnis und steht die 21.0 im Log?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.
Seite 2 von 3     12 3      

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