Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#3

AW: Select where wert in (...)

  Alt 27. Jan 2012, 11:21
Hi,

So was könnte man z.B. mit einer SP machen.


SQL-Code:

create or alter procedure SP_DECODE_LIST (
  ALIST DOM_MEMO,
  ADELIMITER DOM_CHAR1)
returns (
  ITEM DOM_VCHAR100)
AS
DECLARE VARIABLE I INTEGER;
begin
  IF (ADelimiter is NULL) THEN
    ADelimiter = ',';

  ALIST = COALESCE(ALIST, '');
  ITEM = NULL;

  IF (CHAR_LENGTH(ALIST) > 0) THEN
  BEGIN
    WHILE (CHAR_LENGTH(ALIST) > 0) DO
    BEGIN
  
      I = POSITION(ADELIMITER IN ALIST);
      IF (I = 0) THEN
        I = CHAR_LENGTH(ALIST) +1;

      ITEM = F_TRIM(LEFT(ALIST, I-1));
      suspend;

      ALIST = SUBSTRING(ALIST FROM I + 1 FOR CHAR_LENGTH(ALIST));
    END

  END ELSE
    suspend; -- einmal NULL
end

die Query würde dann so aussehen
SQL-Code:


  select
    L.ITEM,
    R.*
  from
    SP_DECODE_LIST(:Menge, ',') L
    join MyTable R on (R.ID = L.ITEM)


und im Delphi übergibst du die Liste dem Parameter als Commatext

Delphi-Quellcode:

  MeineQuery.ParamByName('Menge').AsString := '222,223,224,225,226,227';

ps.
Vor dem Erstellen der SP müssen die Domains "DOM_MEMO" als Blob Typ 1 und "DOM_CHAR1 und "DOM_VCHAR100" wie der Name schon sagt definiert werden.
Oder halt direkt den Typ angeben.
Alexander
  Mit Zitat antworten Zitat