Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
stored procedure ile arama yapma
#1
Hem kendimi geliştirmek hem de daha hızlı sorgu yapabilmek için delphi tarafındaki sorgu kodlarımı db tarafına aktararak stored procudure ile yapmaya çalışıyorum.

Yazdığım sp ile personel aramasında, tc kimlik no, adı, soyadı vb. alanlardan hangileri doldurulmuş ise o alanlarda arama yaptırmak istiyorum.
sp yazarken, where ifadesi içinde if kullanamayınca bir değişken tanımlayıp o değişkeni şartlara göre düzenledim.

sp'yi çalıştırdğımda ilk önce aşağıdaki hatayı veriyor, devam et dediğimde, kayıtlı bir tc numarası sorgulattığımda sonuç doğru dönüyor, adı alanında arama yapınca sonuç boş dönüyor.
hata metni (sp de içinde)   :

Dynamic SQL Error
SQL error code = -104
Token unknown - line 26, column 3
SARTLAR
while executing:
CREATE OR ALTER PROCEDURE SP_PERSONEL_ARA (TC_NO BigInt, ADI D_STR_20, SOYADI D_STR_30, ONCEKI_SOYADI D_STR_30, SICIL D_STR_11, KADRO_GOREV_YERI D_STR_60, BIRIM_GOREV_YERI D_STR_60, AKTIF D_STR_1) returns (ID Integer, AD D_STR_20, SOYAD D_STR_30, BRANS D_STR_60, BIRIM D_STR_60, KADRO D_STR_60)
AS
/*
  You can change this template in the template editor:
  File | Preferences | Object Templates

  Procedure:

  Author   : , 
  Date     : 20.04.2018 13:14:39
  Purpose  :
  Params
  ------
  <param>  : <purpose>
*/
declare variable SARTLAR varchar(200);

begin
if (:TC_NO<>0) then
SARTLAR='and TC_KIMLIK_NO=:TC_NO'; else
SARTLAR='';
if (:ADI<>'') then
SARTLAR=SARTLAR +' and ADI=:ADI';
  select ID,ADI,SOYADI,BRANSI,BIRIM_GOREV_YERI,KADRO_GOREV_YERI from personelana
  where 1=1
  SARTLAR
  INTO :ID, :AD,:SOYAD,:BRANS,:BIRIM,:KADRO;
  suspend;
  
end

İstediğimi nasıl yapabilirim?
Cevapla
#2
(20-04-2018, Saat: 15:12)canbir Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHem kendimi geliştirmek hem de daha hızlı sorgu yapabilmek için delphi tarafındaki sorgu kodlarımı db tarafına aktararak stored procudure ile yapmaya çalışıyorum.

Yazdığım sp ile personel aramasında, tc kimlik no, adı, soyadı vb. alanlardan hangileri doldurulmuş ise o alanlarda arama yaptırmak istiyorum.
sp yazarken, where ifadesi içinde if kullanamayınca bir değişken tanımlayıp o değişkeni şartlara göre düzenledim.

sp'yi çalıştırdğımda ilk önce aşağıdaki hatayı veriyor, devam et dediğimde, kayıtlı bir tc numarası sorgulattığımda sonuç doğru dönüyor, adı alanında arama yapınca sonuç boş dönüyor.
hata metni (sp de içinde)   :

Dynamic SQL Error
SQL error code = -104
Token unknown - line 26, column 3
SARTLAR
while executing:
CREATE OR ALTER PROCEDURE SP_PERSONEL_ARA (TC_NO BigInt, ADI D_STR_20, SOYADI D_STR_30, ONCEKI_SOYADI D_STR_30, SICIL D_STR_11, KADRO_GOREV_YERI D_STR_60, BIRIM_GOREV_YERI D_STR_60, AKTIF D_STR_1) returns (ID Integer, AD D_STR_20, SOYAD D_STR_30, BRANS D_STR_60, BIRIM D_STR_60, KADRO D_STR_60)
AS
/*
  You can change this template in the template editor:
  File | Preferences | Object Templates

  Procedure:

  Author   : , 
  Date     : 20.04.2018 13:14:39
  Purpose  :
  Params
  ------
  <param>  : <purpose>
*/
declare variable SARTLAR varchar(200);

begin
if (:TC_NO<>0) then
SARTLAR='and TC_KIMLIK_NO=:TC_NO'; else
SARTLAR='';
if (:ADI<>'') then
SARTLAR=SARTLAR +' and ADI=:ADI';
  select ID,ADI,SOYADI,BRANSI,BIRIM_GOREV_YERI,KADRO_GOREV_YERI from personelana
  where 1=1
  SARTLAR
  INTO :ID, :AD,:SOYAD,:BRANS,:BIRIM,:KADRO;
  suspend;
  
end

İstediğimi nasıl yapabilirim?

select ID,ADI,SOYADI,BRANSI,BIRIM_GOREV_YERI,KADRO_GOREV_YERI from personelana
  where 1=1
and   (TC_KIMLIK_NO=:TC_NO or (:TC_NO  is null))
and   (adi=:adi or (:adi  is null))
  INTO :ID, :AD,:SOYAD,:BRANS,:BIRIM,:KADRO;

Bu sekilde dener misiniz?
Cevapla
#3
denedim ve çalıştı.
Çok teşekkür ederim. ( + rep)
Cevapla
#4
Sevgili @canbir , @klavye  nin sunduğu çözüm mantıklı. Sadece ufak bir hatırlatma yapmak istedim, Firebird'de senin ilk paylaştığın şekilde stored procedure hazırladığın zaman, senin örneğinde "SARTLAR" değişkinini WHERE kısmında o şekilde kullanamazsın. o şekilde Kullanabilmen için WHERE 1+1 'den sonra || SARTLAR şeklinde, arada iki tane || koyman lazım. Yoksa SARTLAR değişkeninde hep hata verecektir. Zaten sende de aynı şekilde 'TOKEN UNKNOWN : SARTLAR' hatasını vermiş.

Yani o satır şöyle olmalı :
select ID,ADI,SOYADI,BRANSI,BIRIM_GOREV_YERI,KADRO_GOREV_YERI from personelana
  where 1=1 ||  SARTLAR
 INTO :ID, :AD,:SOYAD,:BRANS,:BIRIM,:KADRO;
Dmitry Kouzmenko ve Dmitry Yemanov ile çalışmış , Eski IBSurgeon personeli, Kıdemli Firebird Kurtarma Uzmanı, Firebird Foundation bağışçısı...
Cevapla
#5
(20-04-2018, Saat: 15:30)rmzgenius Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSevgili @canbir , @klavye  nin sunduğu çözüm mantıklı. Sadece ufak bir hatırlatma yapmak istedim, Firebird'de senin ilk paylaştığın şekilde stored procedure hazırladığın zaman, senin örneğinde "SARTLAR" değişkinini WHERE kısmında o şekilde kullanamazsın. o şekilde Kullanabilmen için WHERE 1+1 'den sonra || SARTLAR şeklinde, arada iki tane || koyman lazım. Yoksa SARTLAR değişkeninde hep hata verecektir. Zaten sende de aynı şekilde 'TOKEN UNKNOWN : SARTLAR' hatasını vermiş.

Yani o satır şöyle olmalı :
select ID,ADI,SOYADI,BRANSI,BIRIM_GOREV_YERI,KADRO_GOREV_YERI from personelana
  where 1=1 ||  SARTLAR
 INTO :ID, :AD,:SOYAD,:BRANS,:BIRIM,:KADRO;

bilgi için çok teşekkür ederim,

|| burada string birleştirme amaçlı olarak mı kullanılıyor?
Cevapla
#6
(20-04-2018, Saat: 15:52)canbir Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol|| burada string birleştirme amaçlı olarak mı kullanılıyor?

Aynen öyle, birden fazla değişkeni || ile yanyana birleştirebilirsin. O işaret olmazsa, sende çıkan hata gibi hep TOKEN UNKNOWN hatası alırsın.
Kolay gelsin.
Dmitry Kouzmenko ve Dmitry Yemanov ile çalışmış , Eski IBSurgeon personeli, Kıdemli Firebird Kurtarma Uzmanı, Firebird Foundation bağışçısı...
Cevapla
#7
anladım,
bu sorun vasıtasıyla, sayenizde iki yeni şey öğrenmiş oldum.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Procedure Yardım SecondLife 1 303 03-06-2018, Saat: 19:18
Son Yorum: Kuri_YJ
  Firebird CariBakiye Hesaplama Stored Procedure masteryoda 4 961 08-02-2017, Saat: 17:11
Son Yorum: masteryoda



Konuyu Okuyanlar: 1 Ziyaretçi