20 Kasım 2022 • 29 dakikalık okuma
PostgreSQL veritabanında fonksiyon, prosedür, view ve common table expression tanımlama işlemleri terminal ile kolayca yapılabilir. Terminal ekranından postgres veritabanına bağlandıktan sonra;
PostgreSQL örnek fonksiyon tanımlaması, parametre almayan ve int değer döndüren fonksiyon;
create function getPersonCount()
returns int
language plpgsql
as
$func$
declare personCount integer;
begin
select count(id) into personCount from person;
return personCount;
end;
$func$;
PostgreSQL örnek fonksiyon tanımlaması, parametre alan ve varchar değer döndüren fonksiyon;
create function "getPersonNameByID"(personID int)
returns varchar
language plpgsql
as
$func$
declare fullName varchar(100);
begin
select concat(firstName, ' ', lastname) into fullName from person where id = personID;
return fullName;
end;
$func$;
Parametre almayan ve tüm tabloyu döndüren fonksiyon;
create function getAllPerson()
returns setof person
as
$func$
select * from person
$func$
language sql;
Parametre alan ve tüm tabloyu döndüren fonksiyon;
create function getPersonsNameStartsWith(search varchar)
returns setof person
language plpgsql
as
$func$
begin
return query
select * from person where firstname like concat(search, '%');
end;
$func$;
Parametre alan ve istenen tablo kolonlarını döndüren fonksiyon;
create function getPersonFullNamesStartsWith(search varchar)
returns table (first_name varchar, last_name varchar)
language plpgsql
as
$func$
begin
return query
select firstname, lastname from person where firstname like concat(search, '%');
end;
$func$;
Tanımlanmış fonksiyonları görmek için;
\df
Tanımlanmış fonksiyonları çalıştırmak için;
select getPersonCount();
select "getPersonNameByID"(1002);
select getAllPerson();
select getPersonsNameStartsWith('Y');
select getPersonFullNamesStartsWith('Y');
Var olan fonksiyon içeriğini görmek için;
\df+ "getPersonNameByID";
\df+ getPersonCount;
Var olan fonksiyon içeriğini güncellemek için;
create or replace function "getPersonNameByID"(personID int)
returns varchar
language plpgsql
as
$func$
declare fullName varchar(100);
begin
select concat(firstName, ' ', lastName) into fullName from person where id = personID;
return fullName;
end;
$func$;
Fonksiyonu silmek için;
drop function "getPersonNameByID";
drop function getPersonCount;
Prosedür tanımlamak için;
create procedure insertPerson(firstname varchar, lastname varchar, email varchar, birthdate date)
language plpgsql
as
$proc$
begin
insert into person (firstname, lastname, email, birthdate) values (firstname, lastname, email, birthdate);
end
$proc$;
Tanımlı prosedürleri görmek için;
\df
Tanımlı prosedürleri çalıştırmak için;
call insertperson('Altan', 'Tekisim', 'altantekisim@coolmail.net', '1981-12-12');
Tanımlı prosedürün detayını görmek için;
\df+ "insertperson";
Prosedürü güncellemek için;
create or replace procedure insertPerson(firstname varchar, lastname varchar, email varchar, birthdate date)
language plpgsql
as
$proc$
begin
insert into person (firstname, lastname, email, birthdate) values (firstname, lastname, email, birthdate);
end
$proc$;
Tanımlı prosedürü silmek için;
drop procedure "insertperson";
View tanımlamak için;
create view last10Person as
select firstname, lastname from person order by id desc limit 10;
Tanımlı view listesini görmek için;
\dv
View çalıştırmak için;
select * from last10Person;
View silmek için;
drop view last10Person;
CTE tanımlamak için;
with cte_PersonAge as(
select firstName, lastname, extract(year from (age(now(), birthdate))) as age
from person
)
select firstname, lastname, age from cte_PersonAge where age > 70 order by age desc