WebToolkit Automata

Főként webes alkalmazásokhoz szeretnék tudás-szikrákat és hasznos tudnivalókat megosztani másokkal. Papírjaim nincsenek róla, hogy profi lennék, de tapasztalat van mögöttem. Ha valaki szívesen csatlakozna mint szerkesztő, akkor csak szóljon, és megbeszéljük a többit. Addig is további jó olvasgatást!

Címkék

Tárolt eljárás vagy tárolt függvény?

2010.05.10. 20:44 | Legó Bálint | Szólj hozzá!

Címkék: sql

Amikor elmesélték nekem, hogy van ez a kettő, akkor nem igazán értettem, hogy mi a különbség. A tapasztalat mondta meg, hogy végül is mire használjam őket.

 

Először egy gyors áttekintés:

Tárolt eljárások (Stored Procedure) alatt önálló függvényhívásokat értünk, mint pl.:

MS SQL:

exec mySP

-----------------------

ORACLE:
call mySP();

A neve után vagy adunk neki zárójelet, vagy nem. Elvileg működnie kell.

 

Tárolt függvények külsőre nagyon hasonlóak, DE:

1. Nem állhatnak önállóan!

Helytelen(A példa):

mySF()

Helyes(B példa):

select * from mySF()

vagy

MS SQL:

set @myvaltozo = mySF()

-----------------------------

ORACLE

myvaltozo := mySF();

2. Csak egy meghatározott értékkel térhetnek vissza!

Ez alatt azt kell érteni, hogy ha táblát is adnak vissza, akkor is tudni kell előre a tábla pontos szerkezetét mezőszámmal, típusokkal, szabályokkal/constraintekkel/ együtt. Az létrehozáskor beégetődik. "select * from tabla" esetén is figyelni kell, mert ott pontos mezőket ad vissza, és nem érzékeli, ha változott a tábla struktúrája. Ez utóbbi információ csak MS SQL alatt van számomra bizonyítva, ORACLE alatt nincs ilyen mély tapasztalatom.

Tárolt eljárásokban meghatározhatunk ki és bemenő paramétereket, de ezek nem lehetnek táblaváltozók, vagy egyéb komplex változók. Ha ilyen tábla változók visszaadására van szükség, akkor ideiglenes táblákat kell használni(temporary table). Ilyen táblák trükkjeiről majd egy másik posztban mesélek.

MS SQL alatt nem lehet tárolt eljárásokból a temptáblákhoz hozzáférni valamilyen mágikus okból... talán biztonsági probléma? Nem tudom. Oracle alatt ilyenről még nem hallottam.

 

  Summárium 

Szóval az én szájízem szerint a két dolgot a következőképpen használom.

Tárolt eljárásokat a programlogika első lépcsőjeként használom, tehát az adatbázishívásoknál tárolt eljárásokat hívok, emiatt

  • nehezebbé válik az SQL injection típusú támadás a website ellen
  • a mechanika szinte tiszta SQL alapon megy, szóval a webprogramozásban szinte csak megjelenítenem kell a kapott adatokat, mert
  • a visszakapott táblákat program oldalon el tudom kapni, és ki tudom szedni, hogy melyik kell nekem (többnyire a legutolsó).

Tárolt függvényeket a select/update/delete kifejezéseimben szoktam használni, ezek

  • sokszor segítenek egyszerűsíteni egy-egy kifejezést(kevesebb join, kevesebb szűrés a where-ben, és közérthetőbb, hogy mit csinál a kifejezés)
  • ilyen esetekben azonban megfontolandó, hogy a kiszámolt értéket(függvény visszatérési értéke) nem célszerűbb -e előre kiszámoltatni, és feltüntetni mint mezőt

 

Remélem sikerült pár gondolatot felébreszteni a kedves olvasóban. Szívesen válaszolok minden felmerülő kérdésre.

A bejegyzés trackback címe:

https://webkit.blog.hu/api/trackback/id/tr641990925

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása