---
title: "stored procedure"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/58505-stored-procedure"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "P"
published: "2002-11-09T11:52:43.000Z"
updated: "2002-11-12T20:43:09.000Z"
replies: 5
views: 343
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/58505-stored-procedure"
---

# stored procedure

## #1 — P, 2002-11-09T11:52Z

Vad är egentligen det?

Permalänk: https://www.webforum.nu/p/58505

## #2 — LarsG, 2002-11-09T19:21Z

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.

Permalänk: https://www.webforum.nu/p/851126

## #3 — P, 2002-11-12T15:12Z

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?

Permalänk: https://www.webforum.nu/p/853122

## #4 — JAreMANNEN, 2002-11-12T15:16Z

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 &"' "
```

Permalänk: https://www.webforum.nu/p/853126

## #5 — LarsG, 2002-11-12T17:17Z

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.

Permalänk: https://www.webforum.nu/p/853235

## #6 — P, 2002-11-12T20:43Z

hmm kör asp.net

Permalänk: https://www.webforum.nu/p/853461

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/58505-stored-procedure
