KWALIFIKACJA INF3 - CZERWIEC 2014

PYTANIE NR 20.
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?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Funkcja zdefiniowana zwraca wartość, dlatego może być użyta jako element wyrażenia w zapytaniach DML, np. w klauzuli SET przy UPDATE. Procedura składowa uruchamiana jest poleceniem CALL/EXEC, wyzwalacz działa automatycznie po zdarzeniu DML, a reguły nie pełnią typowo roli "wywoływalnego" obiektu w wyrażeniu.

Pełne wyjaśnienie:

W zapytaniach modyfikujących dane (DML), takich jak UPDATE czy INSERT, w wielu miejscach oczekiwana jest wartość (np. po prawej stronie przypisania w SET). Obiekt bazy danych, który najlepiej pasuje do tego wymagania, to funkcja zdefiniowana, ponieważ jej cechą jest zwracanie wartości. Dzięki temu może występować w wyrażeniu SQL, np. w schemacie: UPDATE tabela SET kolumna = funkcja(argumenty).

Odpowiedź "procedura składowa" jest niepoprawna w tym kontekście, bo procedura służy do wykonania sekwencji operacji i uruchamia się ją osobnym poleceniem (CALL/EXEC). Procedura nie jest zwykle traktowana jako część wyrażenia, które ma zwrócić pojedynczą wartość do wstawienia/przypisania w kolumnie.

Odpowiedź "wyzwalacz" także nie pasuje: wyzwalacz nie jest wywoływany "w zapytaniu" przez użytkownika. Działa automatycznie jako reakcja na zdarzenie (np. INSERT/UPDATE/DELETE) i wykonuje się w tle zgodnie z definicją.

Odpowiedź "reguła" nie jest właściwa, ponieważ reguły to mechanizmy specyficzne lub historyczne, niewykorzystywane jako standardowy, jawnie wywoływany fragment kodu zwracający wartość w wyrażeniach UPDATE/INSERT. Na egzaminie praktyczna i ogólna zasada brzmi: gdy potrzebujesz wartości w zapytaniu, wybierasz funkcję; gdy potrzebujesz wykonać procedurę działań, wybierasz procedurę; gdy potrzebujesz reakcji na zdarzenie, używasz wyzwalacza.

  • Wskazówka egzaminacyjna: jeśli w treści pojawia się "zwraca wartość" lub "używane w wyrażeniu SET/SELECT", najczęściej chodzi o funkcję.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Funkcja zdefiniowana przez użytkownika (UDF) to obiekt bazy danych zawierający kod SQL/proceduralny, który zwraca wartość. Dzięki temu można jej używać w zapytaniach jak wbudowanej funkcji, np. w obliczeniach, filtrach lub w przypisaniach kolumn.
Funkcji używasz jako elementu wyrażenia po prawej stronie przypisania, np. w schemacie: UPDATE ... SET kolumna = funkcja(argumenty). Funkcja musi zwracać wartość zgodną typem z kolumną, którą aktualizujesz.
Procedura składowa jest wywoływana osobnym poleceniem (np. CALL/EXEC) i służy do wykonania sekwencji działań, a nie do zwrócenia pojedynczej wartości w wyrażeniu. W UPDATE klauzula SET oczekuje wartości, dlatego naturalnym wyborem jest funkcja.
Wyzwalacz uruchamia się automatycznie po zdarzeniu (INSERT/UPDATE/DELETE) i nie wywołujesz go bezpośrednio w treści zapytania. Funkcję natomiast wywołujesz jawnie w zapytaniu i otrzymujesz wartość zwrotną do użycia w wyrażeniu.
Tak, jeśli DBMS na to pozwala, funkcja zwracająca wartość może być użyta w wyrażeniu zarówno w INSERT (np. przy wyliczaniu wstawianej wartości), jak i w UPDATE (np. w SET). Kluczowe jest to, że funkcja zwraca wynik używalny jako wartość.
Najczęściej są to obliczenia i transformacje: naliczanie rabatu, podatku, zaokrąglanie, konwersja jednostek, normalizacja tekstu (np. wielkość liter), a także przygotowanie danych do zapisu. Funkcja pomaga przenieść logikę do bazy i ujednolicić wyniki.
Typowy błąd to założenie, że skoro procedura wykonuje kod SQL, to można jej użyć jak funkcji w wyrażeniu SET. To mylenie "wykonania akcji" z "zwróceniem wartości". Na egzaminie sprawdzaj, czy obiekt ma zwracać wartość w zapytaniu.
Zwykle nie wywołuje się go ręcznie w treści zapytania. Wyzwalacz jest powiązany ze zdarzeniem (np. UPDATE na tabeli) i uruchomi się automatycznie, gdy to zdarzenie zajdzie. Jeśli potrzebujesz jawnego uruchomienia logiki, stosuje się procedurę lub funkcję.
Skalarna zwraca pojedynczą wartość (np. liczba, tekst, data) i łatwo użyć jej w SET lub SELECT. Tabelaryczna zwraca wynik w postaci zbioru wierszy/kolumn, który można traktować jak tabelę w zapytaniu. W kontekście aktualizacji kolumn najczęściej używa się funkcji skalarnych.
Przećwicz na przykładach różnice: funkcja (zwraca wartość i wchodzi do wyrażenia), procedura (uruchamiana poleceniem, wykonuje operacje), wyzwalacz (działa automatycznie). Rozwiązuj zadania z UPDATE/INSERT, gdzie trzeba dobrać właściwy obiekt.
info

To pytanie poprawnie rozwiązuje 60% zdających egzamin. średnie

Eksperci podkreślają: "Funkcja zdefiniowana zwraca wartość, dlatego może być użyta jako element wyrażenia w zapytaniach DML, np. w klauzuli SET przy UPDATE."

Źródła:

  • PostgreSQL Documentation: "CREATE FUNCTION" (User-Defined Functions), https://www.postgresql.org/docs/current/sql-createfunction.html - accessed 2026-02-27
  • Microsoft Learn: "Scalar user-defined functions" (Transact-SQL), https://learn.microsoft.com/en-us/sql/t-sql/functions/scalar-user-defined-functions-transact-sql - accessed 2026-02-27
  • MySQL 8.0 Reference Manual: "CREATE FUNCTION Statement", https://dev.mysql.com/doc/refman/8.0/en/create-function.html - accessed 2026-02-27

Materiały:

  • Dokumentacja DBMS używanego w nauce (sekcje o CREATE FUNCTION i wywoływaniu funkcji w SQL)
  • Ćwiczenia z pisania UPDATE/INSERT z wyrażeniami i funkcjami
  • Porównawcze notatki: funkcja vs procedura vs wyzwalacz (tabela różnic)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego