Procedury składowane

2007-05-15 08:59

Jak to działa? W skrócie mówiąc chodzi o to by niektóre operację na bazie dokonywać poprzez wywołanie funkcji, a nie listę kolejnych zapytań SQL w naszej aplikacji.

Jakie są plusy tego rozwiązania?

  • implementacja logiki biznesowej - nie trzeba tej samej funkcjonalności implementować/poprawiać gdy mamy kilka aplikacji klienckich, podobna sprawa ma się przy zmianie środowiska programistycznego, mamy mniej do zaimplementowania od nowa
  • wydajność - wszystko odbywa się po stronie serwera, już na samym czasie wymiany danych między bazą, a aplikacją zaoszczędzamy
  • przejrzystość - wywołanie jednej procedury w aplikacji zamiast kilku zapytań SQL

W PostgreSQL mamy możliwość skorzystania z kilku języków proceduralnych: PL/pgSQL, PL/TCL, PL/Perl, PL/Python, ale na naszych hostingach administracja udostępnia nam zazwyczaj PL/pgSQL.

Na początku utwórzmy bardzo prostą funkcję, która co tydzień będzie miała za zadanie wskazywać określoną ilość najbardziej aktywnych użytkowników na forum. Poniższe przykłady działają dla wersji >= 8.0. Dla wersji 7.4 trzeba je lekko zmodyfikować, np. zamiast $$ użyć apostrofu '.

Niestety powyższy przykład jest niewydajny (dla każdego rekordu jest wykonywane zapytanie UPDATE), sam kilka razy przekombinowałem z procedurami składowanymi i były tego odwrotne skutki niż zamierzone. Poniżej poprawiona wersja.

Kolejny przykład pokazuje wykorzystanie SETOF. W ten sposób do utworzonej funkcji będziemy się odwoływać jak do tabeli.

Przy usuwaniu funkcji podajmy poza nazwą także argumenty.

Procedura składowana nieodzownie łączy się z tematem wyzwalaczy (triggers) i w sumie głównie tam je wykorzystujemy, ale o tym już w następnym wpisie.

Słowa kluczowe: PostgreSQL, Techblog, bazy danych, funkcje, plpgsql, procedury, sql, artykuł, blog

Projektowanie i tworzenie stron www w PHP5. Opisy i recenzje oprogramowania typu cms, blog, wiki, open source.
Wszelkie prawa zastrzeżone.