Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Postgresql de Fonksiyon Parametrelerine göre Where kısmını oluşturmak
#1
Selamün Aleyküm arkadaşlar,

Postgresql veritabanında aşağıdaki gibi bir fonksiyonum var.

Fonksiyonun parametreleri bazen boş olabiliyor. 

Parametre boş oluncada Select sorgu sonucu boş dönüyor. 

Acaba bu parametrelere göre fonksiyon içinde bir değişken tanımlayıp where kısmına ekleyebilir miyiz?
CREATE OR REPLACE FUNCTION "abc"."listeal"("xsehir1" VARCHAR,"xsehir2" VARCHAR)

RETURNS TABLE("id" int4, "sehir1" varchar, "sehir2" varchar, "tutar" float8) AS $BODY$BEGIN

-- Where kısmını Bir değişkene aktarsak 
-- DECLARE s TEXT;
 
-- IF ("xsehir1"<>'') THEN
--  s=' and (l."sehir1"="xsehir1")';
-- END IF;

-- IF ("xsehir2"<>'') THEN
-- s=s+' and (l."sehir2"="xsehir2")';
-- END IF;

-- Delete(s,1,4);
-- if s<>'' then
-- s='WHERE '+s

RETURN Query
SELECT l."id",l."sehir1",l."sehir2",l."tutar" FROM "abc"."liste" l + s;




END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 100
.
Cevapla
#2
(10-12-2020, Saat: 15:26)barissagir Adlı Kullanıcıdan Alıntı: Selamün Aleyküm arkadaşlar,

Postgresql veritabanında aşağıdaki gibi bir fonksiyonum var.

Fonksiyonun parametreleri bazen boş olabiliyor. 

Parametre boş oluncada Select sorgu sonucu boş dönüyor. 

Acaba bu parametrelere göre fonksiyon içinde bir değişken tanımlayıp where kısmına ekleyebilir miyiz?
CREATE OR REPLACE FUNCTION "abc"."listeal"("xsehir1" VARCHAR,"xsehir2" VARCHAR)

RETURNS TABLE("id" int4, "sehir1" varchar, "sehir2" varchar, "tutar" float8) AS $BODY$BEGIN

-- Where kısmını Bir değişkene aktarsak 
-- DECLARE s TEXT;
 
-- IF ("xsehir1"<>'') THEN
--  s=' and (l."sehir1"="xsehir1")';
-- END IF;

-- IF ("xsehir2"<>'') THEN
-- s=s+' and (l."sehir2"="xsehir2")';
-- END IF;

-- Delete(s,1,4);
-- if s<>'' then
-- s='WHERE '+s

RETURN Query
SELECT l."id",l."sehir1",l."sehir2",l."tutar" FROM "abc"."liste" l + s;




END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 100
.

Merhabalar,

PostgreSQL hiç kullanmadım. Biraz araştırma yaptım.
Bu örnek umarım işinize yarar.

CREATE OR REPLACE FUNCTION public._1_ExampleQuery(namefield varchar(50) DEFAULT 'name')
RETURNS TABLE(id double precision , name character varying(100), frc smallint) 
 LANGUAGE 'plpgsql'
 RETURNS NULL ON NULL INPUT
AS $BODY$
DECLARE
-- ------ GOAL ------------------------------------------------------------- 
--
--  If 'namefield' is blank, set namedwhere as empty, if namefield is 
--  present build sql structure to omit blanks

 sqlQuery text;
 namedwhere text;
BEGIN

 IF namefield = '' THEN
    namedwhere := '';
 ELSE 
    namedwhere := ' and ' || quote_identifier(namefield) || ' <> '''' ';
 END IF;

 sqlQuery  := 'SELECT id,name,frc FROM road_nw WHERE frc = 1 ' || namedwhere;

   -- RAISE NOTICE 'SQL Query Statement: %',sqlQuery;
   RETURN QUERY EXECUTE sqlQuery;
END;
$BODY$;
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
Allah razı olsun kardeşim.
Cevapla
#4
Bu örneğim çalışıyor.


  RETURNS TABLE("xid" int4, "xsehir1" varchar, "xsehir2" varchar) AS $BODY$
DECLARE
  sqlQuery text;
  s text;

BEGIN
IF "_sehir1" = '' THEN
s := '';
ELSE
s := ' and (sehir1' || ' = ''' || _sehir1 || ''')';
END IF;
IF "_sehir2" = '' THEN
s := '';
ELSE
s := ' and (sehir2' || ' = ''' || _sehir2 || ''')';
END IF;
IF s <> '' THEN
s :=' WHERE ' || RIGHT(s, - 4);
END IF; 

sqlQuery  := 'SELECT id, sehir1, sehir2 FROM isler' || s;

RETURN  QUERY EXECUTE sqlQuery;
END;
$BODY$
 LANGUAGE plpgsql VOLATILE STRICT
 COST 100
 ROWS 1000
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  POSTGRESQL Otomatik artan sıra no nasıl veriliyor? COMMANDX 8 3.616 23-06-2022, Saat: 16:42
Son Yorum: COMMANDX
  PostgreSQL trigger hatası 41linea41 3 1.281 07-01-2022, Saat: 22:36
Son Yorum: 3ddark
  postgresql hakkında erdal51 9 5.127 28-09-2021, Saat: 14:20
Son Yorum: mcuyan
  Postgresql date alan ekleme sorunu barissagir 7 3.095 22-01-2021, Saat: 00:00
Son Yorum: barissagir
  Yaklasan Güne göre Gruplamak 41linea41 11 4.716 30-11-2020, Saat: 21:56
Son Yorum: serdar



Konuyu Okuyanlar: 1 Ziyaretçi