Podprogramy w SQL dzielą się na dwa rodzaje:
CALL/EXEC i nie zawsze są używane w warstwie select.Ważne:
Przykład funkcji skalarnej (PostgreSQL):
CREATE FUNCTION get_tax(amount NUMERIC, rate NUMERIC DEFAULT 0.13) RETURNS NUMERIC AS $$ BEGIN RETURN amount * rate; END; $$ LANGUAGE plpgsql; -- użycie: SELECT *, get_tax(price) AS tax FROM product;
Przykład procedury składowanej (SQL Server):
CREATE PROCEDURE add_employee(@name NVARCHAR(100), @salary INT, @emp_id INT OUTPUT) AS BEGIN INSERT INTO employees (name, salary) VALUES (@name, @salary); SET @emp_id = SCOPE_IDENTITY(); END; DECLARE @id INT; EXEC add_employee 'John', 100000, @id OUTPUT;
Czy można używać procedury składowanej bezpośrednio w SELECT?
Często odpowiadają "tak", ale to nieprawda.
Odpowiedź:
EXEC/CALL), podczas gdy funkcje — można używać w SELECT.Historia
Projekt: System wstępnej ewidencji, realizacja raportów. Błąd: Zamiast funkcji napisano procedurę do obliczania sumy — SELECT nie działał, trzeba było przepisane całą logikę raportów użytkowników.
Historia
Projekt: System ERP z zewnętrznymi parametrami. Błąd: Dla procedury nie określono klucza OUT, w wyniku czego klient nie mógł poznać ID dodanego rekordu, integracja "się zepsuła".
Historia
Projekt: Usługa finansowa z obliczeniami podatku według różnych zasad. Błąd: Użyto funkcji skalarnej w masowym zapytaniu bez testu wydajności — zapytanie spowolniło przetwarzanie tabeli z powodu wywołania wiersz po wierszu (nieoptymalny plan).