ben

OMÜ , Bilgisayar Mühendisliği, 13'

3 Mart 2022 Perşembe

Table return Function

 

Normalde burada yapacağımız işlemleri sqlserver, mysql ve oracle sistemlerinde genellikle procedure tarafında yapıyoruz. Belli bir sorgu sonucunda gelen table sonucu ekranda gösterme işlemini malesef postgresql tarafında procedure içinde yapamıyoruz. Çünkü procedure tarafında geriye değer dondurme olayı burada yok sadece ekrana notice ile yazdırabiliyoruz , bunun içinde tek ifade olması gerek bir table veri truunde  verileri listeleyemiyoruz. Eğer bu şekilde bir değer döndürmesini istediğimiz bir yapı var ise bunu postgresql tarafında fonksiyon olarak yazmalıyız.

Örneğin; film adı verildiğinde filmde oynayan oyuncuların listesini istedğimiz bir fonksiyon yazmak isteseydik bunu sql serverda procedure olarak yapabilirdik. Burada ise fonksiyon olarak yazmak zorundayız. O zaman ilk örnek için kodumuzu yazmaya başlayalım.


create  function film_aktor(film_adi varchar)
returns table( ad varchar, soyad varchar)
language plpgsql
as $$
begin
  return query select first_name, last_name from film fl 
  inner join film_actor fa on fa.film_id=fl.film_id 
  inner join actor ac on ac.actor_id=fa.actor_id
  where title=film_adi;
end; 
$$;


select * from film_aktor('Chamber Italian');


Burada dikkat etmeniz gereken noktalar;
*  returns table içine verdiğiniz sütun isimlerinin sorgu içinde gelen sütun isimlerinden farklı olası gerekiyor. Aynı yazdığınızda hata verir çalışmaz..
*  returns table da verilen sütunların veri türleri, sorgudan gelen sütunların veri türleri ile aynı olmalı..


ÖRNEK: Verilen kategoriye göre en son kiralanan 5 filmin listesini getiren fonksiyon yazınız.

returns table( film_adi varchar, aciklama text, yil year)
language plpgsql
as $$
begin
  return query select title, description, release_year from category cg 
  inner join film_category fc on fc.category_id=cg.category_id
  inner join film fl on fl.film_id=fc.film_id
  inner join inventory ivn on ivn.film_id=fl.film_id
  inner join rental rn on rn.inventory_id=ivn.inventory_id
  where cg.name=kategori order by rental_date desc limit 5;
end; 
$$;


aksiyon kategorisinden en son kiralanan 5 film için;


select * from film_listesi('Action');



Hiç yorum yok: