Rozdział 14: Własne funkcje

Jak można się łatwo domyślić, funkcje które możemy pisać mogą być troszkę bardziej rozbudowane, niż te podane poprzednio.

Nasza baza danych w momencie gdy napotka średnik, próbuje poprzedzające ten znak polecenie wykonać. My natomiast potrzebujemy skonfigurować bazę danych w sposób taki, abyśmy mogli owy średnik zamienić na inny znak, po to, aby baza danych kod znajdujący się w kilku liniach potraktowała jako jedno polecenie. Ignorując tym samym średniki które tam się znajdą. Nie jest to idealne wyjaśnienie, natomiast wszystko będzie jasne po przeczytaniu przykładu.

Tworzymy funkcję

Przejdźmy zatem do przykładu

CREATE FUNCTION firstUpper (tekst TEXT)
RETURNS TEXT
BEGIN
	DECLARE firstLetter TEXT;
	DECLARE otherLetters TEXT;
        SET firstLetter = UCASE(LEFT(tekst, 1));
        SET otherLetters = LCASE(SUBSTRING(tekst, 2));
        RETURN concat('Hello ', firstLetter, otherLetters);
END

Powyżej przedstawiam funkcję która jest odrobinę bardziej rozbudowana niż poprzednio.

Mianowicie funkcja o nazwie „firstUpper” przyjmuje jako parametr wartość tekstową.
Rozbija ją na pierwszy znak oraz pozostałe, pierwszy dodatkowo zmienia na dużą literę. Pozostałe znaki zmienia na małe wersje liter.
Na koniec wszystko łączy w jeden string i zwraca, dodając na początku tekst „Hello„.

Całość składa się z kilku linii kodu, w tym celu musimy separator „;” (średnika” zmienić na jakiś inny, najczęściej wybierane znaki to: „$$” lub „//„.

Jak zatem powinien wyglądać powyższy przykład ?

DELIMITER //

CREATE FUNCTION firstUpper (tekst TEXT)
RETURNS TEXT
BEGIN
	DECLARE firstLetter TEXT;
	DECLARE otherLetters TEXT;
        SET firstLetter = UCASE(LEFT(tekst, 1));
        SET otherLetters = LCASE(SUBSTRING(tekst, 2));
        RETURN concat('Hello ', firstLetter, otherLetters);
END
//

DELIMITER ;

Dodaliśmy deklarację separatora, na końcu naszej funkcji za pomocą tego samego separatora wskazaliśmy bazie danych gdzie kończy się nasza procedura. Na samym zaś końcu zmieniliśmy separator na domyślny (średnik).