AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

Ein Thema von hoika · begonnen am 24. Aug 2009 · letzter Beitrag vom 25. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 24. Aug 2009, 13:51
Datenbank: Firebird • Version: 1.5 • Zugriff über: egal
Hallo #,

kniffliges Problem.

Ich habe eine SP1.
Der wird ein Datum übergeben.

SP2 hat einen fast identischen Code,
nur wird dort statt dem Dateum 'Now' (Current_Date) benutzt.

Es sind selectable SP's.

SQL-Code:
CREATE PROCEDURE SP_GETBASECOSTCENTER2
RETURNS (
    THEPERSONALID INTEGER,
    THEPERSONALNAME VARCHAR(30),
    THEPERSONALFIRSTNAME VARCHAR(20),
    THECOSTCENTERID INTEGER,
    THECOSTCENTERNO VARCHAR(20),
    THECOSTCENTERNAME VARCHAR(100))
AS
begin
  execute Procedure SP_GETBASECOSTCENTER1('Now')
    Returning_Values
    (THEPERSONALID,THEPERSONALNAME,THEPERSONALFIRSTNAME,
    THECOSTCENTERID,THECOSTCENTERNO,THECOSTCENTERNAME);

  suspend;

end
Das blöde ist jatzt aber.
Es wird nur der 1. Datensatz zurückgegeben (das ist das eine suspend hier),
obwohl in der SP_GETBASECOSTCENTER1 per

For Select do
begin
suspend
end;

mehrere Datensätze zurückgegeben werden.

Ist ja auch klar, weil ich kein Recordset als Return-Parameter habe,
sindern nur einfache Variablen.

Aber was mache ich denn jetzt (unter FB1.5).

Unter FB2x könnte ich temporäre Tabellen benutzen oder jetzt neu Default-Parameter.


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 24. Aug 2009, 14:02
Versuch mal
SQL-Code:
CREATE PROCEDURE SP_GETBASECOSTCENTER2
RETURNS (
    THEPERSONALID INTEGER,
    THEPERSONALNAME VARCHAR(30),
    THEPERSONALFIRSTNAME VARCHAR(20),
    THECOSTCENTERID INTEGER,
    THECOSTCENTERNO VARCHAR(20),
    THECOSTCENTERNAME VARCHAR(100))
AS
begin
  for select
      *
  from
      SP_GETBASECOSTCENTER1('Now')
  into
    :THEPERSONALID,:THEPERSONALNAME,:THEPERSONALFIRSTNAME,
    :THECOSTCENTERID,:THECOSTCENTERNO,:THECOSTCENTERNAME do
  begin
      suspend;
  end
end
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 24. Aug 2009, 14:14
Hallo,

ahhh, clever !
Hätte ich selber draufkommen sollen.

For Select * geht zwar nicht,
du musst die Felder angeben.


#Update#
* geht doch. Ist ja sehr verwunderlich.


#Update 2#
Hm, ich benutze zur Optimierung den IB Planalyzer.
Der bringt mir einen Fehler, dass der Plan (Query-Plan) nicht stimmt.
Auch IBExpert zeigt mir nur PLAN an.

Scheint aber ein Problem von FB1.5 zus ein, der 2.1er zeigt den Plan.

Egal: looft.


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 24. Aug 2009, 21:06
Zitat von hoika:
#Update#
* geht doch. Ist ja sehr verwunderlich.
Nö, es ist halt vollkommen egal was irgendein Tool behauptet. Nur ob die DB es mag ist interessant.
Anscheinend sind die Aussagen deiner beiden Tools n der Richtung wohl nicht zuverlässig.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:11
Hallo,

Moment

Ich habe mich nur gewundert, das FB ein Select * genau hier erlaubt.
Sonst ist PSQL doch sehr pingelig, was ja auch gut ist .
Stimmt schon, IBExpert prüft SP's ja vorher auch noch ab.
Kann auch sein, dass es in IB6 noch nicht ging.

Ich hätte nicht gedacht, dass das Select * geht,
weil sonst immer die Felder genau definiert werden müssen.
Die Feld-Reihenfolge ist ja per SQL-Standard bei Select* nicht definiert,
aber ich schreibe die ja per Into in eine genau definierte Variablen-Reihenfolge.

Das hatte mich gewundert.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:12
Zitat von Elvis:
Zitat von hoika:
#Update#
* geht doch. Ist ja sehr verwunderlich.
Nö, es ist halt vollkommen egal was irgendein Tool behauptet. Nur ob die DB es mag ist interessant.
Anscheinend sind die Aussagen deiner beiden Tools n der Richtung wohl nicht zuverlässig.
wenn man weiss, wo all diese Tools den Plan herbekommen, dann kann man dazu auch Kommentare
abgeben, wenn man das nicht weiss, wie in diesem Fall offentsichtlich, dann sollte man das
auch nicht kommentieren.

Firebird selbst liefert via API den Plan zu einem Statement zurück, und wenn die Firebird
Version nun mal nichts liefert, dann zeigen die Tools auch nichts an.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:16
Zitat von hoika:
Hallo,

Ich habe mich nur gewundert, das FB ein Select * genau hier erlaubt.
Sonst ist PSQL doch sehr pingelig, was ja auch gut ist .
Stimmt schon, IBExpert prüft SP's ja vorher auch noch ab.
Kann auch sein, dass es in IB6 noch nicht ging.

Ich hätte nicht gedacht, dass das Select * geht,
weil sonst immer die Felder genau definiert werden müssen.
Die Feld-Reihenfolge ist ja per SQL-Standard bei Select* nicht definiert,
aber ich schreibe die ja per Into in eine genau definierte Variablen-Reihenfolge.

Das hatte mich gewundert.


Heiko
select * geht immer wenn zur compilezeit die anzahl der Felder passt, wenn diese sich aber mal
ändern sollte, dann bekommmst du spätestens beim neukompilieren ein Problem, deshalb
immer in Prozeduren die Feldnamen auflösen und auf * verzichten.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:21
Hallo,

Einspruch
Nicht nur die Anzahl der Felder muss stimmen,
auch der Feldtyp.
Ein Select Int_Feld Into :Var_Feld geht nicht.

Ist ja auch egal

Ich habe aus Vorsichtsgründen das Select*
durch Select Feld1, Feld 2 .. ersetzt.

Und es looft ja auch.


Noch mal zum Plan:
Bei FB2.X kommt bei SP1 ein NATURAL (SP2) raus,
bei FB1.5 nix.
Ist wohl ein Bug.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:31
Zitat von hoika:
Hallo,

Einspruch
Nicht nur die Anzahl der Felder muss stimmen,
auch der Feldtyp.
Ein Select Int_Feld Into :Var_Feld geht nicht.

Ist ja auch egal

...
selber einspruch

die Parameter und die Inhalte müssen kompatibel sein, du kannst sehrwohl integer in varchar packen,
auch umgekehrt geht das, wenn im varchar was zu integer kompatibles steht. Firebird ist da extrem
flexibel, führt aber manchmal zu Schlampigkeit, die sich erst beim Endkunden rächt.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Firebird: SP1 ruft SP2 auf (SP2 enthält For Select)

  Alt 25. Aug 2009, 07:48
Hallo,

re
neh, geht nicht.
Probier es einfach mal aus.
Zumindestens in einer SP klappt das nicht,
es sei denn es wird gecastet.


Hieko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:52 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