PostgreSQL - İşlevler
PostgreSQL functionsDepolanan Prosedürler olarak da bilinen, normalde birkaç sorgu ve gidiş-dönüş gerektiren işlemleri veritabanında tek bir işlevde gerçekleştirmenize olanak tanır. Diğer uygulamalar, orta katman veya yinelenen kod yerine doğrudan depolanmış yordamlarınızla etkileşime girebildiğinden, işlevler veritabanının yeniden kullanımına izin verir.
İşlevler, SQL, PL / pgSQL, C, Python vb. Gibi seçtiğiniz bir dilde oluşturulabilir.
Sözdizimi
Bir işlev oluşturmak için temel sözdizimi aşağıdaki gibidir -
CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$
DECLARE
declaration;
[...]
BEGIN
< function_body >
[...]
RETURN { variable_name | value }
END; LANGUAGE plpgsql;
Nerede,
function-name işlevin adını belirtir.
[VEYA DEĞİŞTİR] seçeneği, mevcut bir işlevi değiştirmeye izin verir.
İşlev, bir return Beyan.
RETURNcümleci tümce, işlevden döneceğiniz veri türünü belirtir. return_datatype temel, bileşik veya etki alanı türü olabilir veya bir tablo sütununun türüne başvurabilir.
function-body çalıştırılabilir kısmı içerir.
AS anahtar sözcüğü, bağımsız bir işlev oluşturmak için kullanılır.
plpgsqlişlevin uygulandığı dilin adıdır. Burada, PostgreSQL için bu seçeneği kullanıyoruz, bu seçenek SQL, C, dahili olabilir veya kullanıcı tanımlı bir yordamsal dilin adı olabilir. Geriye dönük uyumluluk için, isim tek tırnak içine alınabilir.
Misal
Aşağıdaki örnek, bağımsız bir işlev oluşturmayı ve çağırmayı gösterir. Bu fonksiyon, COMPANY tablosundaki toplam kayıt sayısını döndürür. Aşağıdaki kayıtları içeren ŞİRKET tablosunu kullanacağız -
testdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Fonksiyon totalRecords () aşağıdaki gibidir -
CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
total integer;
BEGIN
SELECT count(*) into total FROM COMPANY;
RETURN total;
END;
$total$ LANGUAGE plpgsql;
Yukarıdaki sorgu yürütüldüğünde sonuç şu olur -
testdb# CREATE FUNCTION
Şimdi bu işleve bir çağrı yapalım ve COMPANY tablosundaki kayıtları kontrol edelim.
testdb=# select totalRecords();
Yukarıdaki sorgu yürütüldüğünde sonuç şu olur -
totalrecords
--------------
7
(1 row)