Subprogramma's in SQL zijn van twee soorten:
CALL/EXEC en worden niet altijd gebruikt in de select-laag.Belangrijk:
Voorbeeld van een scalair functie (PostgreSQL):
CREATE FUNCTION get_tax(amount NUMERIC, rate NUMERIC DEFAULT 0.13) RETURNS NUMERIC AS $$ BEGIN RETURN amount * rate; END; $$ LANGUAGE plpgsql; -- gebruik: SELECT *, get_tax(price) AS tax FROM product;
Voorbeeld van een stored procedure (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;
Kan een stored procedure rechtstreeks in SELECT worden gebruikt?
Vaak antwoorden mensen "ja", maar dat is onjuist.
Antwoord:
EXEC/CALL), terwijl functies in SELECT kunnen worden gebruikt.Verhaal
Project: Systeem voor primaire boekhouding, implementatie van rapporten. Fout: In plaats van een functie is er een procedure geschreven voor het berekenen van de som - SELECT werkte niet, de gehele logica van de gebruikersrapporten moest herschreven worden.
Verhaal
Project: ERP-systeem met externe parameters. Fout: Voor de procedure is er geen OUT-key opgegeven, waardoor de klant de ID van de toegevoegde record niet kon weten, integratie "kapot" ging.
Verhaal
Project: Financiële dienst met belastingberekeningen volgens verschillende regels. Fout: Een scalair functie is in een massaal verzoek gebruikt zonder prestatie-test - de aanvraag vertraagde de verwerking van de tabel door de regel-voor-regel oproep (niet-geoptimaliseerd plan).