Det är ett program som exekveras i databasservern.
Man kan skriva en funktion som denna t.ex.
create function getSubCat(p_id int)
returns character varying(400)
reads sql data
begin
declare a cursor for select subCategory
from subCategory
where categoryId = p_id;
declare names varchar(400) default '';
open a;
begin
declare exit handler for not found begin end;
declare subCategory varchar(18);
loop
fetch a into subCategory;
set names = names || subCategory;
end loop;
end;
close a;
return names;
end
En funktion kan sedan användas var som helst i andra sql-satser
select category,getSubCat(categoryId) from category
where category = 'Thriller'
Man kan också skriva en procedur som man anropar som ett separat statement, t.ex. om man vill utföra flera saker med ett anrop
create procedure storeSubCategory(in p_category varchar(30),
in p_subCategory varchar(30))
modifies sql data
begin
declare v_categoryId int;
declare exit handler for sqlexception
begin
rollback;
resignal;
end;
start transaction;
if not exists (select * from category
where category = p_category) then
set v_categoryId = next value for categorySequence;
insert into category values(v_categoryId,p_category);
end if;
insert into subCategory
select p_subCategory,categoryId
from category
where category = p_category;
commit;
end
För att anropa denna
call storeSubCategory('Thriller','The crooked hinge')
Det finns lite olika språk för att skriva procedurer/funktioner. Ovanstående använder den syntax som finns i sql-standarden. De flesta dbms har en egen syntax.
