Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Tworzenie funkcji

Termin Definicja
Tworzenie funkcji

Tworzenie funkcji poleceniem CREATE FUNCTION definiuje obiekt zwracający wartość lub zbiór wyników.

Rola funkcji w modelu bazy danych

Funkcja tworzona poleceniem CREATE FUNCTION jest zapisanym w bazie fragmentem logiki, który przyjmuje opcjonalne argumenty, wykonuje określone operacje i przekazuje wynik do miejsca wywołania. Może zwracać pojedynczą wartość, na przykład liczbę, tekst, datę albo wartość logiczną, a w zależności od używanego silnika także zestaw wierszy przypominający wynik zapytania. Dzięki temu powtarzalne obliczenia i reguły przetwarzania danych nie muszą być kopiowane do wielu zapytań aplikacji.

Definicja funkcji zwykle obejmuje jej nazwę, parametry wejściowe, typ wyniku oraz ciało zawierające instrukcje SQL lub kod proceduralny obsługiwany przez dany silnik. Parametr ma określony typ danych, dlatego przekazana wartość może zostać zaakceptowana, przekształcona albo odrzucona w zależności od zgodności typów i reguł konwersji. Funkcja może korzystać z tabel, widoków, innych funkcji i konstrukcji warunkowych, lecz dokładny zakres dozwolonych operacji zależy od konkretnej implementacji.

Najczęściej funkcję wywołuje się jako część wyrażenia, na przykład w klauzuli SELECT, WHERE, ORDER BY albo podczas przypisywania wartości do kolumny. Funkcja skalarna może obliczyć podatek, przeliczyć jednostki, ujednolicić format numeru lub wyznaczyć status rekordu. Funkcja zwracająca tabelę może przygotować ograniczony, logicznie zdefiniowany zestaw danych używany później w większym zapytaniu.

Parametry, wynik i miejsce wywołania

Projektując funkcję, trzeba najpierw ustalić, czy wynik jest pojedynczą wartością, czy zbiorem rekordów. Funkcja skalarna powinna mieć jasno określony typ zwracany, ponieważ od niego zależy możliwość porównywania wyniku, sortowania oraz łączenia go z innymi wyrażeniami. Funkcja tabelaryczna wymaga zdefiniowania struktury zwracanych kolumn albo zapytania, którego wynik stanowi treść funkcji. W tym drugim przypadku istotne są nazwy kolumn, ich typy i kolejność.

Ważnym elementem jest obsługa wartości NULL. Brak wartości nie zawsze oznacza zero, pusty tekst albo wartość fałszywą. Jeżeli funkcja wykonuje działania arytmetyczne lub łączy teksty, nieprzemyślane obchodzenie się z NULL może prowadzić do wyniku innego od oczekiwanego. Regułę zastępowania braku wartości należy zapisać świadomie, a nie pozostawiać jej przypadkowej konwersji zależnej od silnika.

Funkcja różni się od procedury składowanej sposobem użycia. Procedura jest zwykle uruchamiana jako osobna operacja i może służyć do wykonania sekwencji działań, natomiast funkcja została zaprojektowana przede wszystkim jako element wyrażenia lub źródło danych. Widok przechowuje zapytanie bez parametrów wejściowych albo z ograniczonym mechanizmem parametryzacji zależnym od produktu. Kod aplikacji wykonuje się poza bazą, więc wymaga przesłania danych między aplikacją a silnikiem. Funkcja może ograniczyć powielanie logiki, lecz przeniesienie zbyt dużej części programu do bazy utrudnia późniejsze testowanie i utrzymanie.

Przy większych zbiorach danych znaczenie ma koszt wywołania. Funkcja użyta dla każdego wiersza może zwiększyć czas wykonania zapytania, szczególnie gdy jej ciało ponownie odczytuje tabele albo wykonuje kosztowne przekształcenia. Optymalizator nie w każdym silniku analizuje funkcję w takim samym stopniu jak bezpośrednio zapisane zapytanie. Dlatego warto sprawdzać plan wykonania i porównywać rozwiązanie funkcyjne z zapytaniem zapisanym bezpośrednio.

Ślady błędów w definicji i działaniu

Jednym z częstych problemów jest utworzenie funkcji w innym schemacie lub bazie niż ta, z której korzysta aplikacja. Wywołanie bez pełnej nazwy może wtedy wskazywać nie ten obiekt, którego oczekuje program, albo zakończyć się błędem nierozpoznanej funkcji. Przy wdrożeniu należy kontrolować kolejność tworzenia zależności, uprawnienia do odczytu tabel oraz zgodność wersji definicji z kodem aplikacji.

Błędy mogą wynikać także z niezgodności typów parametrów. Przekazanie tekstu tam, gdzie oczekiwana jest data lub liczba, czasem kończy się błędem, a czasem niejawną konwersją. Drugi przypadek jest szczególnie trudny do wykrycia, ponieważ wynik może być poprawny dla części danych i błędny dla pozostałych. Funkcja powinna jasno określać akceptowane typy, a aplikacja powinna walidować dane przed wywołaniem.

Nieprawidłowy wynik często wiąże się z kolejnością działań, filtrowaniem rekordów albo obsługą pustego zbioru. Funkcja obliczająca wartość na podstawie wielu wierszy musi mieć ustalone zachowanie, gdy nie znajdzie żadnego rekordu lub gdy znajdzie kilka równorzędnych rekordów. Należy również rozstrzygnąć, czy wynik zależy od bieżącego czasu, ustawień sesji, języka, strefy czasowej lub kolejności sortowania.

Diagnostyka powinna obejmować samą definicję, przykładowe parametry, plan wykonania oraz uprawnienia użytkownika wykonującego zapytanie. Warto testować przypadki graniczne: wartości zerowe, ujemne, bardzo długie teksty, brak powiązanego rekordu, powtarzające się identyfikatory i niepełne dane. Jeżeli funkcja modyfikuje dane lub korzysta z operacji o skutkach ubocznych, trzeba sprawdzić reguły transakcji i ograniczenia konkretnego silnika, ponieważ nie wszystkie implementacje pozwalają na taki sam zakres działań.

Gdzie kończy się problem programistyczny, a zaczyna sprzętowy

Sam błąd związany z funkcją jest zagadnieniem konfiguracji bazy, aplikacji albo uprawnień, więc jego rozwiązania szuka się w kodzie i środowisku programowym. Inaczej wygląda sytuacja, gdy komputer przerywa pracę podczas zapytań, zawiesza aplikacje, zgłasza błędy odczytu plików bazy lub traci dane po nagłym wyłączeniu. Wtedy przyczyną może być uszkodzony dysk, niestabilna pamięć, problem z zasilaniem albo przegrzewanie podzespołów.

Warszawskie Pogotowie Komputerowe zajmuje się serwisem sprzętu komputerowego — laptopów i komputerów stacjonarnych. Jeżeli objawy wskazują na awarię nośnika, można również skonsultować podstawowy odzysk danych z uszkodzonego dysku lub innego nośnika.

Przed przekazaniem urządzenia warto zanotować komunikaty, moment występowania awarii i to, czy problem pojawia się także przy innych programach. Nie należy wielokrotnie uruchamiać komputera z uszkodzonym dyskiem ani instalować na nim nowych danych, gdy ważne pliki mogą wymagać odzyskania. Takie informacje pomagają oddzielić błąd zapisanej funkcji od objawów awarii sprzętu i właściwie ustalić dalszą diagnostykę.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę