Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Parameter-Übergabe für IN-Operator (https://www.delphipraxis.net/158246-parameter-uebergabe-fuer-operator.html)

DelphiBandit 10. Feb 2011 12:01

Datenbank: Firebird • Version: 1.5. • Zugriff über: IBO

Parameter-Übergabe für IN-Operator
 
Hallo zusammen,

versuche jetzt schon eine Weile herum, aber finde keine Lösung. Ich möchte eine Stored-Procedure bauen, welche eine Reihe von Werten für den IN-Operator übergeben bekommt. Mit String-Übergabe klappt das schon mal überhaupt nicht.

Möchte alle Datensätze, welche auf den ersten beiden Stellen in der Menge enthalten sind. Mit der Übergabe von BEREICHE geht es nicht, schreibe ich es hart codiert in die SP, klar dann funktioniert es. Bin also eigentlich auf der Suche nach einer Art "Evaluator" für die übergebenen BEREICHE (Beispiel-Inhalt '"10","11","12"')

Hat einer von Euch einen Ansatz oder eine Idee für mich?

Vielen Dank

Code:
CREATE PROCEDURE SP_SUCHE (
    TEILNAME VARCHAR(60),
    BEREICHE VARCHAR(128))
RETURNS (
    KZ CHAR(1),
    WERT CHAR(9),
    SUCHNAME VARCHAR(60))
AS
BEGIN
  KZ = "1";

  FOR SELECT WERT, SUCHNAME
      FROM VIEW_SELEKTIERE
      WHERE SUCHNAME STARTING WITH :TEILNAME
      AND SUBSTRING(WERT FROM 1 FOR 2) IN (:BEREICHE)
      INTO :WERT, :SUCHNAME DO
  BEGIN
    SUSPEND;
  END
END

borwin 10. Feb 2011 12:29

AW: Parameter-Übergabe für IN-Operator
 
Für IN können keine Parameter übergeben werden.
Eine Lösung wäre dynamisches SQL
oder Werte in eine temporäre Tabelle schreiben und dann in das IN per SELECT als Abragemenge einbinden.

Gruß Borwin

Bummi 10. Feb 2011 12:29

AW: Parameter-Übergabe für IN-Operator
 
Ich kenne Firebird nicht unter SQL-Server muß der SQL für diesen Fall in einem Varchar zusammengebaut und per Exec ausgeführt werden.

DelphiBandit 10. Feb 2011 12:47

AW: Parameter-Übergabe für IN-Operator
 
Jupp, danke für den Anstoss - baue mir jetzt mein SQL dynamisch aus einem String zusammen, in den der Parameter mit eingefügt wird. Funktioniert tadellos:
Code:
  STMNT = "SELECT WERT, SUCHNAME FROM VIEW_SELEKTIERE WHERE SUBSTRING(WERT FROM 1 FOR 2) IN (" || :BEREICHE || ")";
  FOR EXECUTE STATEMENT
      STMNT
      INTO :WERT, :SUCHNAME
      DO
    SUSPEND;
OK, das "STARTING WITH" sollte ich noch ergänzen :)


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