opublikował: _byku_, 2014-03-08
 

          Procedury składowane to kod, który wykonywany jest po stronie serwera. Zalicza się go do obiektów bazy danych i jest jego integralną częścią, podobnie jak tabela, widok, czy też indeks. Procedurę należy rozpatrywać jako obiekt definiowany w bazie danych, który wchodzi w jej skład

Głównymi zaletami wykorzystywania procedur składowanych, są:

  • zmniejszenie ilości interakcji z bazą danych, co w efekcie pozwala zaoszczędzić zasoby serwera.

  • mniejsze ryzyko popełnienia błędu (różne aplikacje korzystają z tej samej procedury).

  • zwiększenie bezpieczeństwa (nikt nie ma dostępu do bazy i tabel)

  • zmniejszenie kosztów uruchomienia i konserwacji oraz zmniejszenie kosztów przesyłu danych (szybka transmisja na serwer).

Co istotne - podczas wykorzystywania procedur składowanych użytkownicy nie mają bezpośredniego dostępu do tabel. Program zezwala jedynie na wykonywania pre definiowanych procedur. To szybkie i wygodne rozwiązanie dla każdego użytkownika baz danych. Jednak najważniejsze jest bezpieczeństwo – użytkownik nie może wykonać swobodnych operacji na danych, które w efekcie mogą przynieść niepożądane skutki.

 

Jak stworzyć procedurę?

Użytkownicy, którzy chcą zdefiniować deklarację procedury powinni przeprowadzić następujący zapis:

Postać schematyczna

CREATE [OR REPLACE] PROCEDURE nazwa_procedury

IS

blok PL/SQL bez słowa DECLARE

 

Najprostszą implementacją procedury jest:

CREATE PROCEDURE zapytanie IS

BEGIN

          NULL

END;

W ten sposób definiowaliśmy procedurę „zapytanie”, która nic nie wykonuje, ponieważ w jej ciele, nie znajduje się, żaden kod wykonujący operacje.


Postarajmy się napisać zatem nieco bardziej zaawansowaną procedurę:

CREATE PROCEDURE OR RELACE zapytanie IS

BEGIN

          SELECT *

          FROM Customers

END;

Proszę zauważyć, czym ta funkcja różni się od poprzedniej?

Pozwoliłem sobie dodać w pierwszej linijce „OR RELACE” - ten fragment kodu pozwala nam na zastąpienie istniejącej procedury o takiej samej nazwie, w przypadku, gdyby taka już istniała w naszej bazie danych.

Jest to nic innego niż zabezpieczenie się przed wystąpieniem błędu o niemożliwości utworzenia procedury. Należy też pamiętać o drugiej stronie medalu. Dodając do definicji naszej procedury klauzuli „OR RELACE”, możemy napisać w pełni działającą wcześniej zdefiniowaną metodę. Należy na to uważać.

Rozpatrując dalej naszą metodę widźmy pomiędzy znacznikami BEGIN i END ciało naszej procedury. To ten fragment kodu wykona się w trakcie jej wywołania.

 

Jak wywołać procedurę?

Aby wywołać naszą procedurę wykonujmy zapytanie:

EXEC zapytanie

go

gdzie „zapytanie” to nazwa naszej procedury.

W efekcie otrzymamy wynik zgodny z zawartością procedury – czyli wybranie wszystkich rekordów z tabeli Customers. Oczywiście tabela Customers musi istnieć inaczej wywołanie naszej procedury zakończy się błędem.

Jak widać tworzenie procedury nie należy do implementacyjno-skomplikowanych. Wystarczy wpisać w jej ciele kod, który zamierzamy wykonać.

 

Jak usunąć procedurę?

Procedury możemy usuwać, do tego posłuży nam fragment kodu:

DROP PROCEDURE nazwa_procedury;

rozpatrując nasz przypadek wywołujemy kod:

DROP PROCEDURE zapytanie

Który bezpowrotnie kasuje naszą procedurę z bazy danych.

 

          Warto wspomnieć, że bardzo podobnym zagadnieniem do procedur są funkcję, ale nie należy ich mylić z procedurami. Funkcje działają podobnie jak procedury, jednak mogą przyjmować parametry na wejściu. Szczegółowo o funkcjach powiemy na osobnej publikacji.

Zanim przystąpisz do pisania własnych procedur ważne jest, abyś pamiętał, że niedopuszczalne jest, aby procedury zmieniały treść innych procedur. Użytkownik może się jednak odwoływać do tabeli z innej bazy danych niż tej, na której aktualnie pracuje. Same procedury mogą jednak usuwać, modyfikować czy tworzyć nowe definicje tabel i widoków.

Znając te podstawy jesteś w stanie pisać dużo bardziej zaawansowane procedury. Wszystko zależy od Twojej wyobraźni i znajomości SQL.

Zachęcam do kreatywnego i optymalnego implementowania, powodzenia!

 

Zaloguj się aby dodać komentarz

    faster 09.03.2014 o 23:01

    Swietna publikacja. Podoba mi sie, bo wszystko po kolei tlumaczy. Mialem wziąć udzial w tym konkursie, ale tak zawyżyłeś poprzeczkę, że nie ma nawet co zbierać. Twoim rywala będzie ciężko.