Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Stored Procedure Problem (https://www.delphipraxis.net/207351-stored-procedure-problem.html)

Dumpfbacke 16. Mär 2021 08:10

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBExpert

Stored Procedure Problem
 
Hallo an alle hier.
Hier möchte eine Stored Prodedure erstellen wo ich zwei verschieden Where Zeilen haben möchte welche je nach Parameter ausgewählt werden sollen.

Dieses versuche ich zu realisieren mittels (vereinfacht)

Die Paraneter sind Lagerplatz, Entscheidung

Delphi-Quellcode:
Query = ' Select Wert Fro Tabelle1'
if (Entscheidung = 0) then
Query = Query || Where Schrank = :Lagerplatz'
';
Query = Query || where ...';
execute Statement query into :Wert
Mein Problem ist wie bekomme ich den Paramter Lagerplatz in die Where Klausel rein ? So wie ich es beschrieben habe geht es leider nicht. Wenn ich den Lagerplatz als "normalen" Wert also nicht als Paraeter hinterlege geht es. also z.B. Where Lagerplatz = 21/2

Kann mir jemand sagen wie es hinbekommen kann ? Gerne auch einen komplett anderen Weg. Ich muss hier auf jeden Fall je nach Wert Entscheidung einen andere Where Bedingung setzten können.

Ach so der Fehler ist hier Colum unknown

Danke Tanja

Lemmy 16. Mär 2021 08:24

AW: Stored Procedure Problem
 
Servus Tanja,

ganz einfach: nicht als Stored Procedure machen. Das Execute Statement innerhalb einer SP macht div Vorteile von SP wieder zunichte. Und wenn es zwingend als SP gemacht werden soll, dann halt so:

Delphi-Quellcode:

if (Entscheidung = 0) then
begin
  Select Wert from Tabelle1 where Schrank = :Lagerplatz into :Wert;
end else
begin
  Selct WErt from Tabelle1 Where.....
end

SUSPEND;

hoika 16. Mär 2021 08:25

AW: Stored Procedure Problem
 
Hallo,
nimm den Doppelpunkt beim Lagerplatz weg.
Und das Execute Statement ist auch überflüssig.

Ein Bsp.
http://www.destructor.de/firebird/storedproc.htm

Dumpfbacke 16. Mär 2021 08:42

AW: Stored Procedure Problem
 
Zitat:

Zitat von hoika (Beitrag 1485251)
Hallo,
nimm den Doppelpunkt beim Lagerplatz weg.
Und das Execute Statement ist auch überflüssig.

Ein Bsp.
http://www.destructor.de/firebird/storedproc.htm

Nein as funktioniert leider nicht wenn man den Doppelpunkt dort weg nimmt. Das Execute ist auch notwendig denn man kann nicht mitteles einen If eine Wehre Bedingung setzten.
Dage geht leider nicht habe ich schon alles durch.

Tanje

Blup 16. Mär 2021 08:56

AW: Stored Procedure Problem
 
Eine Stored Procedure wird bereits beim Erzeugen kompiliert und ist statisch.
Die Ablaufpläne für die einzelnen SQL innerhalb der Stored Procedure liegen fest und können zur Laufzeit nicht verändert werden.
Es ist nur möglich mit einem Parameter zwischen verschiedenen vorbereiteten SQL auszuwählen (wie von Lemmy vorgeschlagen).

Blup 16. Mär 2021 09:04

AW: Stored Procedure Problem
 
Execute Statement ist die eine Ausnahme, Verwendung siehe hier:

https://firebirdsql.org/refdocs/lang...-execstat.html


Query = Query || ' Where Schrank =' || :Lagerplatz;

mkinzler 16. Mär 2021 09:07

AW: Stored Procedure Problem
 
Zitat:

Zitat von Blup (Beitrag 1485262)
Execute Statement ist die eine Ausnahme, Verwendung siehe hier:

https://firebirdsql.org/refdocs/lang...-execstat.html

Dann verzichtet man aber auf den Vorteil einer SP.

Dumpfbacke 16. Mär 2021 09:15

AW: Stored Procedure Problem
 
OK Danke für die Info
genau das wollte ich vermeiden da ich hier 5 Paramter haben und die Stored nun schon ca. 50 Zeilen hat. Wenn man da etwas ändern muss ist es dann schon wteas schwiriger. Leider.

Danke noch mal an alle die mir hier geholfen haben.

Tanja.

dataspider 16. Mär 2021 09:34

AW: Stored Procedure Problem
 
Man muss den string auch richtig zusammenbauen:

Code:
Query = 'Select Wert Fro Tabelle1';
if (Entscheidung = 0) then
  Query = Query||' Where Schrank = '''||:Lagerplatz||'''';
Frank

Dumpfbacke 16. Mär 2021 09:35

AW: Stored Procedure Problem
 
Zitat:

Zitat von Blup (Beitrag 1485262)
Execute Statement ist die eine Ausnahme, Verwendung siehe hier:

https://firebirdsql.org/refdocs/lang...-execstat.html


Query = Query || ' Where Schrank =' || :Lagerplatz;

Funktionoert leider nicht hatte ich auch schon mal versucht

Dumpfbacke 16. Mär 2021 09:55

AW: Stored Procedure Problem
 
Zitat:

Zitat von dataspider (Beitrag 1485270)
Man muss den string auch richtig zusammenbauen:

Code:
Query = 'Select Wert Fro Tabelle1';
if (Entscheidung = 0) then
  Query = Query||' Where Schrank = '''||:Lagerplatz||'''';
Frank

Danke es ist so einfach wenn man es bekannt ist wie es geht. Ich bin nun wunschlos glücklich da alles genau so funktioniert wie es es gerne haben möchte. Vielen Danke all alle hier die mich hier so super unterstützt haben.

Tanja

Blup 16. Mär 2021 11:49

AW: Stored Procedure Problem
 
Wenn Lagerplatz einen String beihnaltet, muss der natürlich in Anführungszeichen gesetzt werden.
Die Fehlermeldung sollte aber das fehlerhaft zusammengebaute SQL mit ausgegeben haben.

dataspider 16. Mär 2021 16:04

AW: Stored Procedure Problem
 
Zitat:

Zitat von Dumpfbacke (Beitrag 1485253)

Das Execute ist auch notwendig denn man kann nicht mitteles einen If eine Wehre Bedingung setzten.
Dage geht leider nicht habe ich schon alles durch.

Tanje

Man kann sich manchmal so behelfen:
Code:
Select Wert from Tabelle1 where (:Entscheidung <> 0) or (Schrank = :Lagerplatz) into :Wert;
Dann sollte es auch ohne den Umweg mit execute gehen...

Frank


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