Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi unklares verhalten einer stored proc in Firebird (https://www.delphipraxis.net/19393-unklares-verhalten-einer-stored-proc-firebird.html)

Nightfly 2. Apr 2004 09:57


unklares verhalten einer stored proc in Firebird
 
Hi

also, folgender ausdruck liefert bei einer konkreten variablenbelegung ein ergebniss:
SQL-Code:
select sum(R_ANZ * R_EPREIS) from RECHNUNG R, MAIN M /*die negativen*/
where (M.stelle = R.Stelle) and (M.id = R.bereich) and (M.calc = 0) and (R.stelle like '%'||:stelle||'%') and (r.bereich < :zeile) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)= :Monat)
Die folgende StoredProc gibt aber <null> zurück,obwohl sie doch zu dem obigen ausdruck identisch ist. Hilfe,ich versteh das nich!!


SQL-Code:
CREATE PROCEDURE SUM_ZEILE_BER (
    STELLE CHAR(9),
    JAHR INTEGER,
    ZEILE INTEGER,
    MONAT INTEGER)
RETURNS (
    ERGEBNIS NUMERIC(9,2))
AS
DECLARE VARIABLE DIF1 NUMERIC(9,2) = 1;
begin
  select sum(R_ANZ * R_EPREIS) from RECHNUNG R, MAIN M /*die negativen*/
  where (M.stelle = R.Stelle) and (M.id = R.bereich) and (M.calc = 0) and (R.stelle like '%'||:stelle||'%') and (r.bereich < :zeile) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)= :Monat)
  into :dif1;
  ergebnis = :dif1;
  suspend;
end

Lemmy 4. Apr 2004 16:45

Re: unklares verhalten einer stored proc in Firebird
 
Hi,

änder die SP so ab:


SQL-Code:
CREATE PROCEDURE SUM_ZEILE_BER (
    STELLE CHAR(9),
    JAHR INTEGER,
    ZEILE INTEGER,
    MONAT INTEGER)
RETURNS (
    ERGEBNIS NUMERIC(9,2))
AS
DECLARE VARIABLE DIF1 NUMERIC(9,2) = 1;
begin

  FOR

  select sum(R_ANZ * R_EPREIS) from RECHNUNG R, MAIN M /*die negativen*/
  where (M.stelle = R.Stelle) and (M.id = R.bereich) and (M.calc = 0) and (R.stelle like '%'||:stelle||'%') and (r.bereich < :zeile) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)= :Monat)
  into :dif1;
  ergebnis = :dif1

  DO

  suspend;
end

Wenn Du willst, dass ne SP nen Wert uzrückliefert, brauchst Du meines WIssens immer ne For-DO-Suspend/Exit Schleife, auch wenn nur ein Wert zurückkommen soll.

Grüße
Lemmy

MrSpock 5. Apr 2004 06:58

Re: unklares verhalten einer stored proc in Firebird
 
Hallo Lemmy,
Zitat:

Zitat von Lemmy der Weise
Wenn Du willst, dass ne SP nen Wert uzrückliefert, brauchst Du meines WIssens immer ne For-DO-Suspend/Exit Schleife, auch wenn nur ein Wert zurückkommen soll.

Das ist nicht grundsätzlich richtig. Solange nur ein Wert zurückgegeben werden soll, ist eine For - Do Schleife nicht nötig.

Diese funktioniert z.B.:

SQL-Code:
CREATE PROCEDURE "OhneFor"
RETURNS (
    "Erg" NUMERIC(15,2))
AS
begin
  select SUM(S3) FROM "TestComp" into :"Erg";
  suspend;
end
mit der Abfrage:

SQL-Code:
SELECT "Erg" from "OhneFor"

DelphiDeveloper 5. Apr 2004 13:38

Re: unklares verhalten einer stored proc in Firebird
 
Zitat:

Die folgende StoredProc gibt aber <null> zurück,obwohl sie doch zu dem obigen ausdruck identisch ist. Hilfe,ich versteh das nich!!
wie ruft du denn deine SP auf?

in einem select statement oder als echte SP?

insbesonder bei subselects und unions hatte ich mit Parametern öfters
Schwierigkeiten mit interbase und firebird.


Hast du deine SP mal mit IBexpert getestet? Funzt es da auch nicht?

Nightfly 5. Apr 2004 13:49

Re: unklares verhalten einer stored proc in Firebird
 
ja, ich rufe sie mit select auf. im IB expert geht sie auch nicht. erst wenn ich sie direkt im SQL Tool ausführe geht es...komische sache das...

DelphiDeveloper 5. Apr 2004 13:53

Re: unklares verhalten einer stored proc in Firebird
 
Zitat:

SQL Tool
wo und was ist das?

SQL Editor im IBexpert?

Nightfly 5. Apr 2004 15:39

Re: unklares verhalten einer stored proc in Firebird
 
ja, das meinte ich

DelphiDeveloper 5. Apr 2004 15:43

Re: unklares verhalten einer stored proc in Firebird
 
ich vermute mal, dass es an den parametern liegt.
Versuch doch mal deine variablen durch konkrete Werte zu ersetzen.

nochwas:
was benutzt du für eine FB Version?

Nightfly 5. Apr 2004 15:58

Re: unklares verhalten einer stored proc in Firebird
 
firebird 1.5

Das komische: wenn ich konkrete werte in den "quelltext" schreibe gehts.
HAb ich jedoch die variablen, erscheint ja sowohl beim ausführen der procedure als auch beim ausführen des code schnipsels im SQL Editor ein fenster,in dem ich die variablen belegen kann.

Und da das phänomen: Im SQL editor gehts, als Prozedur nicht...

DelphiDeveloper 5. Apr 2004 16:12

Re: unklares verhalten einer stored proc in Firebird
 
Ich habe eine Anwendung mit etwa
400 Prozeduren und 1200 Triggern auf einer IB 6.0 laufen.

Habe diese auf FB 1.5 RC8 umgestellt und habe viele Stellen im programm
die nicht mehr funktionieren.
Viele komplexe Queries (mit massig parametern) liefern einfach keine
Ergebnisse mehr.

Deshalb mußte ich viele parametrisierte Queries notwendigerweise
ändern.

Ich habe das so gemacht, dass ich vor aufruf der Queries meine Variablen
einfach mit Stringreplace durch konkrete Werte ersetze. Das ist häßlich
aber erfüllt seinen zweck.


Bei RC9 ist laut doku auch noch keine besserung in sicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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