|
Witaj na naszym forum!
Nie jesteś zalogowany. (Logowanie - Rejestracja) |
![]() |
|
Google
|
To jest wiadomość reklamowa. | ||
|
Grupa: Goście
|
|
||
|
|||
|
|||
|
Administrator
![]() ![]() ![]() Grupa: Administratorzy Posty: 436 Reputacja: Klejnot w koronie Ostrzeżenia: ![]() Rejestracja: Czwartek 20:42 03.07.2008 |
O czym jest ten artykuł?
Artykuł ma za zadanie przybliżyć czytelnikowi temat pisania własnych funkcji w bazie danych. ![]() Czym są funkcje użytkownika? Funkcje użytkownika są podprogramami zapisanymi bezpośrednio w bazie danych, gdzie językiem programowania jest język SQL oraz elementy specyficzne dla danego systemu bazodanowego (np w PostgreSQL do pisania funkcji standardowo używa się języka pl/pgsql, ale można użyć także perla, javy itp.MS SQL z kolei udostępnia świetny język TransactSQL, który podobnie jak pl/pgsql jest językiem SQL rozszerzonym o elementy programowania proceduralnego). Dlaczego warto stosować funkcje użytkownika? Funkcje użytkownika mogą wpłynąć znacząco na wydajność pisanej aplikacji (skomplikowane zapytania są zapisane w bazie danych, użytkownik/programista ma za zadanie jedynie wywołać funkcję zawierającą dane zapytania poprzez SELECT funkcja(parametr); ). Funkcje użytkownika pomagają także w sytuacjach, gdzie kluczowym elementem jest spójność danych (czyli wszelkiego rodzaju bazy hurtowni, bankowe etc). Stosowanie funkcji użytkownika wszędzie, gdzie tylko jest to możliwe wpływa także korzystnie na bezpieczeństwo kodu naszej aplikacji. Czemu? W przypadku wycieku kodu osoba, która wejdzie w jego posiadanie tak naprawdę nic z nim nie zrobi nie mając źródła funkcji użytkownika. Ponadto użytkownik łączący się na uprawnieniach danej aplikacji do naszej bazy także nie obejrzy sobie kodu funkcji SQL ... So let's go with this shit. Wprowadzenie zaczniemy od tradycyjnego Hello World! w 2 wersjach: bez parametrów i z parametrem. Kod
DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION hw() RETURNS text CHARSET utf8 DETERMINISTIC BEGIN DECLARE var_tekst TEXT; SET var_tekst = 'Hello World!'; RETURN (var_tekst); END; No to tłumaczymy: DELIMITER $$ -> pozwala nam na użycie znaku średnika ( ; ) w ciele funkcji. Znaki $$ mogą zostać zastąpione innymi, np // CREATE DEFINER=`root`@`%` -> określa kto zdefiniował (utworzył) funkcję. DEFINER staje się automatycznie właścicielem funkcji, czyli może podglądnąć jej kod zapisany już na serwerze FUNCTION hw() -> definiuje nazwę funkcji ( w tym przypadku hw() ) wraz z ewentualnymi parametrami RETURNS text CHARSET utf8 -> definiuje jaki typ danych ma funkcja zwrócić na standardowe wyjście Użycie funkcji wygląda następująco: [mysql]SELECT hw();[/mysql] W odpowiedzi serwer MySQL powinien zwrócić string "Hello World!". Wersja tej funkcji z parametrami nie różni się znacząco. Kod
DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION hw(parametr1 varchar(32), parametr2 varchar(32)) RETURNS text CHARSET utf8 DETERMINISTIC BEGIN DECLARE var_tekst TEXT; SET var_tekst = CONCAT(parametr1, ' ', parametr2, '!'); RETURN (var_tekst); END; Jedyną nowością są tutaj parametry podawane do funkcji hw(). Parametry zawsze zapisujemy w sposób podany w przykładzie, czyli: nazwa typ_danych(długość) Koniec części pierwszej. Oryginalny tekst: blog.hemical.pl/2009/10/04/tworzenie-funkcji-w-bazie-danych-na-przykladzie-mysql/ Ostatnio zmieniano Poniedziałek 13:55 28.12.2009 przez kallosz. Razem zmieniano 3 razy.
|
||
|
|||
|
Google
|
To jest wiadomość reklamowa. | ||
|
Grupa: Goście
|
|
||
|
|||
![]() |
| Przejdź do: |
  |
| Kontakt | Wersja lekka | Niedziela 14:19 05.09.2010 |
![]() |