Który z obiektów relacyjnej bazy danych, będący kodem języka SQL, może być wywoływany w zapytaniach modyfikujących kolumny danych widoczne jako tabela, bez względu na to, czy jest tworzony programowo, czy dynamicznie?
Pytanie z egzaminu CKE, czerwiec 2014 (arkusz E.14-X-14.05).
Poprawna jest odpowiedź „funkcja zdefiniowana”, czyli funkcja napisana przez użytkownika bazy. Jej wyróżnikiem jest to, że zwraca wartość, więc można ją wywołać wewnątrz zapytania, tak jak funkcje wbudowane: w liście kolumn SELECT, w warunku WHERE albo w UPDATE ... SET. Funkcja może zwracać pojedynczą wartość albo cały zestaw wierszy, który zapytanie traktuje jak tabelę.
Do zapamiętania: w MySQL funkcję tworzy się poleceniem CREATE FUNCTION z klauzulą RETURNS, np. funkcja brutto(cena) wywoływana jako SELECT nazwa, brutto(cena) FROM towary;. Procedurę uruchamia się osobno, poleceniem CALL, a wyzwalacz uruchamia się sam przy zmianie danych.
Każda z błędnych odpowiedzi to obiekt bazy zapisany w SQL, ale żadnego z nich nie wstawia się do zapytania jak wyrażenia. Wyzwalacz (trigger) nie jest w ogóle wywoływany przez użytkownika: serwer uruchamia go automatycznie, gdy w tabeli zajdzie INSERT, UPDATE lub DELETE. Procedura składowana to zapisany na serwerze zestaw instrukcji, który wykonuje się poleceniem CALL nazwa(). Może zmieniać dane i zwracać wyniki przez parametry, ale nie da się jej użyć wewnątrz SELECT czy WHERE.
Reguła to mechanizm niektórych serwerów (np. PostgreSQL), który przepisuje zapytanie przed wykonaniem, albo po prostu warunek poprawności danych. Też nie jest kodem wywoływanym w zapytaniu. Kluczem do pytania są słowa „może być wywoływany w zapytaniach” - tę cechę ma tylko funkcja, bo zwraca wartość, którą zapytanie od razu wykorzystuje.