22 Mart 2020 Pazar

PostgreSQL'de Function Kullanımı #1

  Ahmet Şimşek       22 Mart 2020 Pazar

Can sıkıntısı ve meraktan PostgreSQL'de function kullanımı ile ilgili bir yazı yazmaya karar verdim. Örnek olarak paylaşacağım kodları online olarak denemek isteyenler için https://sqliteonline.com/ sitesini öneririm. Veritabanı olarak PostgreSQL i seçerek SQL kodlarını deneyebilirsiniz.

PostgreSQL Functions nedir?

PostgreSQL Function direkt veritabanı üzerinde depolanan SQL arabirimi ile erişilebilen SQL sorguları yazmaya izin veren bir özellik. Stored procedure olarakta bilinen SQL veritabanlarının birçoğunun sunduğu bir özellik. Özetlemek gerekirse tek sorgu ile birden fazla ya da bir işi yapabilme imkanı sunuyor. En basit örnek olarak veritabanında belirli bir veri aralığında bulunan total data sayısı için bir function yazabiliriz.

Nasıl oluşturulur?

PostgreSQL içerisinde bir fonksiyon olıuşturmanın özeti;













sqliteonline sitesinde örnek veritabanı ile deneyebileceğiniz örnek bir fonksiyon hemen aşağıda.
CREATE OR REPLACE FUNCTION totalRecords()
RETURNS integer AS $$
DECLARE
total integer;
BEGIN
   SELECT count(*) into total FROM demo;
   RETURN total;
END;
$$ LANGUAGE plpgsql;
demo tablosundaki total kayıt sayısı dönecek bir fonksiyon. Aşağıdaki şekilde total veri sayısına ulaşabiliriz.
select totalRecords();















notlar

  • $$ kullanımı ile ilgili daha fazla bilgi için resmi dökümana göz atabilirsiniz.
  • CREATE OR REPLACE fonksiyon yoksa oluştur varsa mevcut fonksiyonu değiştir anlamına gelir.
  • RETURNS ile fonksiyonun dönüş yapacağı değerin tipini belirtiyoruz.
  • BEGIN ... END; esas fonksiyonun ana işlevlerinin olacağı alanın sarmalayıcıları.
  • DECLARE ile count değerine aktaracağımız değişkeni tipini belirterek oluşturduk.
  • FUNCTION totalRecords() ile fonksiyonun adını belirtiyoruz.


Bir fonksiyonda nasıl parametre kullanabilirim?

getdemo adında vereceğimiz id parametresine göre bize ilgili satırı dönen bir fonksiyon yazalım.

CREATE or REPLACE FUNCTION getdemo(int)
RETURNS SETOF demo AS $$
    SELECT * FROM demo WHERE id = $1;
$$ LANGUAGE SQL;
Aşağıdaki sorguyla id değeri 2 ye eşit olan satırı geri döner.
select * from getdemo(2);









notlar

  • Bu fonksiyonda yukarıdan farklı olarak SETOF kullandık. SETOF ile fonksiyonun dönüş değerlerini belirli bir tablo ile aynı olacağını belirtebiliyoruz.
Eklediğim tüm fonksiyonları nasıl listeleyebilirim?

select n.nspname as function_schema,
       p.proname as function_name,
       l.lanname as function_language,
       case when l.lanname = 'internal' then p.prosrc
            else pg_get_functiondef(p.oid)
            end as definition,
       pg_get_function_arguments(p.oid) as function_arguments,
       t.typname as return_type
from pg_proc p
left join pg_namespace n on p.pronamespace = n.oid
left join pg_language l on p.prolang = l.oid
left join pg_type t on t.oid = p.prorettype
where n.nspname not in ('pg_catalog', 'information_schema')
order by function_schema,
         function_name;




Bir fonksiyonu nasıl silebilirim?

drop function komutu ile silebilirsiniz.
drop function getdemo;
logoblog

Thanks for reading PostgreSQL'de Function Kullanımı #1

Previous
« Prev Post

Hiç yorum yok:

Yorum Gönder