Vad är egentligen det?
stored procedure
5 svar · 343 visningar · startad av P
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.
fattar inte så mycket om jag ska vara ärlig... vad finns det för fördelar med det här jämfört med traditionell "kod".
hittade den här "koden" eller vad det kallas på en sida:
CREATE Procedure UserLogin
(
@Email nvarchar(100),
@Password nvarchar(20),
@UserName nvarchar(100) OUTPUT
)
AS
SELECT
@UserName = Name
FROM
Users
WHERE
Email = @Email
AND
Password = @Password
anropar man det här på något sätt sen lr?
använder du ASP så kan du anropa den från din sida såhär:
sql = " EXEC UserLogin @Email = '"& strEmail &"', @Password = '"& strPasswd &"', @Username = '"& strUserName &"' "
Fördelar med stored procedures:
Prestanda - dels eftersom man kan utföra flera frågor med ett anrop och dels då en procedur redan är kompilerad.
Säkerhet - den som anropar proceduren behöver inte ha privilegier för de tabeller som används i proceduren.