[ÇÖZÜLDÜ] Çoklu String Sorgulama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

[ÇÖZÜLDÜ] Çoklu String Sorgulama

Mesaj gönderen powertrk »

Selamlar,

Daha önce ihtiyacım olmadığından, aşağıdaki şekilde sorgu kullanmamıştım.

{alan }IN {deger1,deger2,degerN}

Stored Procedıre içinde kullanmam gerekti. Sayısal alanlarda herhangi bir problem yok.
Fakat string alanlarda tek tırnak kullanımı gerektiğinden birçok şekilde denememe rağmen sonuç alamadım.
Acaba aramızda bu konuda tecrübesi olan var mıdır?
En son powertrk tarafından 02 Mar 2014 12:06 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Çoklu String Sorgulama

Mesaj gönderen unicorn64 »

buraya,
şuraya,

ve daha fazlası için buradan Google'a bakabilirsiniz
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Re: Çoklu String Sorgulama

Mesaj gönderen powertrk »

Cevabınız için teşekkür ederim.
Fakat siz en basit haliyle IN kullanımını gösteren bağlantıları paylaşmışsınız.
Benim ihtiyacım olan Delphi üzerinden Stored Procedure içinde bulunan bir sorguya parametre vasıtası ile birden çok string değer gönderebilmek.
Birçok kaynakta örneğin burada integer değer gönderimi var.
Integer yalın gönderebiliyor ama string ifadeler IN içerisinde tırnak ile kullanılmak zorunda.
Bu yönde tecrübesi olan kimse varsa ve paylaşırsa sevinirim.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Çoklu String Sorgulama

Mesaj gönderen esistem »

Kod: Tümünü seç

SELECT *
FROM CITY
WHERE ID_CITY IN (SELECT ID FROM GetIntegerList('1, 2, 12, 45, 75, 45'))
aşağıdaki proceduru yukardaki şeklinde kullanabilirsin.

Kod: Tümünü seç

CREATE OR ALTER PROCEDURE "GETINTEGERLIST"("AINTEGERLIST" VARCHAR(32000))
returns (
  ID integer
)
as
  declare variable IntegerList varchar(32000);
  declare variable CommaPos integer;
  declare variable IntegerVal varchar(10);
begin
  IntegerList = AIntegerList || ' ';
  CommaPos = Position(',', IntegerList);

  while (CommaPos > 0) do
  begin
    IntegerVal = Trim(SubString(IntegerList from 1 for CommaPos - 1));

    if (Char_Length(IntegerVal) > 0) then
    begin
      if (IntegerVal similar to '[0-9]*') then
      begin
        ID = Cast(IntegerVal as integer);
        suspend;
      end
    end

    if (Char_Length(IntegerList) > CommaPos) then
      IntegerList = SubString(IntegerList from CommaPos + 1);
    else
      IntegerList = '';

    CommaPos = Position(',', IntegerList);
  end

  IntegerList = Trim(IntegerList);

  if (Char_Length(IntegerList) > 0) then
  begin
    if (IntegerList similar to '[0-9]*') then
    begin
      ID = Cast(IntegerList as integer);
      suspend;
    end
  end
end
stackoverflow da böyle örneklemişler, bende bi projede kullanmıştım.
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Re: Çoklu String Sorgulama

Mesaj gönderen powertrk »

Evet bu benim yukarıda verdiğim örnek zaten.
Bunu integer değil string ile nasıl kullanacağız.
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Re: Çoklu String Sorgulama

Mesaj gönderen powertrk »

Sorun Çözülmüştür. :bravo:

İhtiyacı olabilecekler için Stored Procedure içerisinde kullanımı aşağıdaki gibidir.
:GELENDEGER içerisinde gönderdiğiniz string ifadeler şu şekilde -tırnak içerisinde ve birbirinden virgül ile ayrılmış- olmalıdır:
'Veri1', 'Veri2', 'Veri3'

Kod: Tümünü seç

 FOR EXECUTE STATEMENT
  'SELECT ALAN FROM TABLO
  WHERE 
  ALAN IN ('|| :GELENDEGER ||')'  INTO :CIKISDEGERI
  DO BEGIN
  END
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Çoklu String Sorgulama

Mesaj gönderen smokie »

powertrk yazdı:Sorun Çözülmüştür. :bravo:

İhtiyacı olabilecekler için Stored Procedure içerisinde kullanımı aşağıdaki gibidir.
:GELENDEGER içerisinde gönderdiğiniz string ifadeler şu şekilde -tırnak içerisinde ve birbirinden virgül ile ayrılmış- olmalıdır:
'Veri1', 'Veri2', 'Veri3'

Kod: Tümünü seç

 FOR EXECUTE STATEMENT
  'SELECT ALAN FROM TABLO
  WHERE 
  ALAN IN ('|| :GELENDEGER ||')'  INTO :CIKISDEGERI
  DO BEGIN
  END
Merhabalar,

2.5.326780 Win32 kurulu firebird ile günlerdir deniyorum, Invalid variant type conversion. hatası alıyorum.

Firebird versiyon farkında olabilir mi yada bende hata.
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: [ÇÖZÜLDÜ] Çoklu String Sorgulama

Mesaj gönderen ikra »

kıdemsiz üye
Cevapla