Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Where Alanını If İçerisinde Kullanmak
#21
Beni mahçup ediyorsunuz, basit bir malümat idi sadece. Allah herkesten razı olsun.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#22
Case ile de yapılabiliyormuş. 
Son halini paylaşayım. 
CREATE OR REPLACE FUNCTION "gorev_takip"."sp_gorevlerim2" ( "sorguId" int2, "GonderenNo" int8, "PersonelNo" int8 ) 
	RETURNS TABLE (
		"Gorevid" int8,
		"GorevTuru" VARCHAR,
		"Ack" VARCHAR,
		"Tarih" DATE,
		"Saat" TIME,
		"GonderenId" int8,
		"EkipAd" VARCHAR,
		"gonderen" VARCHAR,
		"Son_Durum" VARCHAR,
		"Orani" int2 
		) AS $BODY$ 
		BEGIN
		
		RETURN query 
		SELECT DISTINCT( gr."ID" ),
	  	gt."AD" AS "GOREV_TURU",
		  gr."ACK",
	  	gr."TARIH",
	  	gr."SAAT",
	  	gr."GONDEREN_ID",
	  	ekp."EKIP_AD",
	  	per."AD_SOYAD" AS "GONDEREN",
	  	gd."AD" AS "SON_DURUM",
	  	gd."ORAN" 
	FROM
		gorev_takip."GOREV" AS gr
		INNER JOIN gorev_takip."GOREV_PERSONEL" AS gper ON gper."GOREV_ID" = gr."ID"
		INNER JOIN gorev_takip."KOD_GOREV_TURU" AS gt ON gr."GOREV_TUR_ID" = gt."ID"
		LEFT JOIN gorev_takip."EKIP" AS ekp ON gr."EKIP_ID" = ekp."ID"
		INNER JOIN gorev_takip."KOD_GOREV_DURUM" AS gd ON gr."SON_DURUM_ID" = gd."ID"
		INNER JOIN gorev_takip."PERSONEL" AS per ON gr."GONDEREN_ID" = per."ID" 
	WHERE
	CASE
			WHEN "sorguId" = 1 THEN ( 1 = 1 ) 
			WHEN "sorguId" = 2 THEN ( gr."GONDEREN_ID" = "GonderenNo" ) 
			WHEN "sorguId" = 3 THEN ( gper."PERSONEL_ID" = "PersonelNo" ) 
		END 
	ORDER BY
			gr."TARIH" DESC,
			gr."SAAT" DESC;
	
	END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000
Cevapla
#23
GonderenNo ve PersonelNo. İki ayrı parametreye gerek yok gibi gözüküyor.
There's no place like 127.0.0.1
WWW
Cevapla
#24
(29-11-2018, Saat: 13:45)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Case ile de yapılabiliyormuş. 
Son halini paylaşayım. 
CREATE OR REPLACE FUNCTION "gorev_takip"."sp_gorevlerim2" ( "sorguId" int2, "GonderenNo" int8, "PersonelNo" int8 ) 
 RETURNS TABLE (
 "Gorevid" int8,
 "GorevTuru" VARCHAR,
 "Ack" VARCHAR,
 "Tarih" DATE,
 "Saat" TIME,
 "GonderenId" int8,
 "EkipAd" VARCHAR,
 "gonderen" VARCHAR,
 "Son_Durum" VARCHAR,
 "Orani" int2 
 ) AS $BODY$ 
 BEGIN
 
 RETURN query 
 SELECT DISTINCT( gr."ID" ),
   gt."AD" AS "GOREV_TURU",
  gr."ACK",
   gr."TARIH",
   gr."SAAT",
   gr."GONDEREN_ID",
   ekp."EKIP_AD",
   per."AD_SOYAD" AS "GONDEREN",
   gd."AD" AS "SON_DURUM",
   gd."ORAN" 
 FROM
 gorev_takip."GOREV" AS gr
 INNER JOIN gorev_takip."GOREV_PERSONEL" AS gper ON gper."GOREV_ID" = gr."ID"
 INNER JOIN gorev_takip."KOD_GOREV_TURU" AS gt ON gr."GOREV_TUR_ID" = gt."ID"
 LEFT JOIN gorev_takip."EKIP" AS ekp ON gr."EKIP_ID" = ekp."ID"
 INNER JOIN gorev_takip."KOD_GOREV_DURUM" AS gd ON gr."SON_DURUM_ID" = gd."ID"
 INNER JOIN gorev_takip."PERSONEL" AS per ON gr."GONDEREN_ID" = per."ID" 
 WHERE
 CASE
 WHEN "sorguId" = 1 THEN ( 1 = 1 ) 
 WHEN "sorguId" = 2 THEN ( gr."GONDEREN_ID" = "GonderenNo" ) 
 WHEN "sorguId" = 3 THEN ( gper."PERSONEL_ID" = "PersonelNo" ) 
 END 
 ORDER BY
 gr."TARIH" DESC,
 gr."SAAT" DESC;
 
 END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000

Bence Where kısmı şu şekilde olmalı
WHERE
  (sorguId = 1) or (sorguId = 2 and gr."GONDEREN_ID = "GonderenNo") or (sorguId = 3 and gper."PERSONEL_ID" = "PersonelNo")

Tablolar bende olmadığı için bunu deneyemedim ancak başka bir tablo üzerinde şu şekilde çalışıyor
create Schema fin;
create table fin.Employee(
EmployeeId int4 not null primary key,
FirstName varchar(30),
LastName varchar(30),
Department bigint,
JobId bigint
);

insert into fin.Employee(EmployeeId, FirstName, LastName, Department, JobId) values (1, 'Ahmet', 'Kerim', 1, 1);
insert into fin.Employee(EmployeeId, FirstName, LastName, Department, JobId) values (2, 'Mehmet', 'Hancı', 1, 2);
insert into fin.Employee(EmployeeId, FirstName, LastName, Department, JobId) values (3, 'Kerem', 'Genco', 2, 1);
insert into fin.Employee(EmployeeId, FirstName, LastName, Department, JobId) values (4, 'Kamil', 'Tırpan', 2, 2);

create function fin.SelectEmployee_ByDeptJob2(Parametre integer, ParamValue character(30))
returns Table
( EmployeeId integer,
  FirstName varchar(30),
  LastName varchar(30),
  Department bigint,
  JobId bigint
)
as $$
Begin
  return query 
    select * from Employee as e where (Parametre=0 or Parametre=null) or 
          (Parametre=1 and e.Department=Cast(ParamValue as bigint)) or 
  (Parametre=2 and e.JobId=Cast(ParamValue as bigint)) or
  (Parametre=3 and e.FirstName=Cast(ParamValue as varchar(30))) or
  (Parametre=2 and e.LastName=Cast(ParamValue as varchar(30)));
end
$$ LANGUAGE plpgsql COST 100 VOLATILE ROWS 1000;

select * from fin.SelectEmployee_ByDeptJob2(Cast(3 as integer), Cast('Ahmet' as character(30)));
  
select * from fin.SelectEmployee_ByDeptJob2(Cast(2 as integer), Cast(1 as character(30)));
Cevapla
#25
(29-11-2018, Saat: 15:33)SimaWB Adlı Kullanıcıdan Alıntı: GonderenNo ve PersonelNo. İki ayrı parametreye gerek yok gibi gözüküyor.

Mevcut mekanizmada, görev dağılımı yapılıyor. Görev gönderen kişi aynı zamanda görev de alabilir.
Bu sisteme bir personel kendine atanan görevleri görmek isteyebilir veya kendisinin gönderdiği görevleri listelemek isteyebilir. Bu durumda işi tek bir fonksiyon ile hallederim dedim. 
PersonelNo var ise personel Id barındırır. GonderenNo var ise yine bir personel Id barındırır. Farklı bir tabloda görev gönderen kişi Id'sini barındırır.
Bu durumda yalnızca personel tipini içeren sayısal bir değer gönderilirse (GonderenNo ve PersonelNo'nun olmadığı bir yapıda) ve bu -1 ise birinci durumu (Tüm kayıtları listelemek) gerçekleştirebilirim. Gelen değer -1 değilse bir personel olduğunu da var sayarak işlem yapabilirim. Fakat bu bir personel no'su ise iki ve üçüncü koşulumu nasıl ayırt edebilirim. Yani bu id bir görev alan mı yada görev gönderen mi?
Cevapla
#26
Belki de ana görev tablosundaki alanları yeniden düzenlemek gerekebilir.

Bazı projelerde aşırı normalizasyon iyi değil.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  sqlite oluşturma-android içerisinde kullanma ? Mr.Developer 8 7.035 30-05-2018, Saat: 23:25
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi