Stored Procedures zijn opgeslagen collecties van één of meerdere SQL statements, voor later gebruik. Je kunt ze inzetten voor:
Er zijn dus grofweg drie voordelen om met Stored Procedures te werken:
Er zijn ook nadelen bij het gebruik van Stored Procedures
I.v.m. de veiligheid kunnen sommige DBMS'en zo ingesteld zijn dat alleen bepaalde gebruikers voldoende rechten hebben om Stored Procedures te maken maar dat andere gebruikers ze wel weer kunnen uitvoeren.
Het maken van een Stored Procedure:
-- Het maken van een Stored Procedure voor het toevoegen van een product aan de Products tabel CREATE OR REPLACE PROCEDURE addProduct( p_id IN PRODUCTS.PROD_ID%TYPE, v_id IN PRODUCTS.VEND_ID%TYPE, p_name IN PRODUCTS.PROD_NAME%TYPE, p_price IN PRODUCTS.PROD_PRICE%TYPE, p_desc IN PRODUCTS.PROD_DESC%TYPE) IS BEGIN INSERT INTO Products("PROD_ID", "VEND_ID", "PROD_NAME", "PROD_PRICE", "PROD_DESC") VALUES (p_id, v_id, p_name, p_price, p_desc); COMMIT; END;
-- Het gebruiken van een Stored Procedure BEGIN addProduct('BR007','BRS01','A Waldorf Puppet',42.50, 'Made of wood and as a result, they are all different'); END;
-- Het Verwijderen van een Stored Procedure DROP PROCEDURE addProduct;
-- Het maken van een Stored Procedure voor het toevoegen van een product aan de Products tabel DELIMITER // CREATE PROCEDURE addProduct( IN p_id char(10), IN v_id char(10), IN p_name char(255), IN p_price decimal(8,2), IN p_desc text ) BEGIN INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc) values (p_id, v_id, p_name, p_price, p_desc); END // DELIMITER ;
-- Het gebruiken van een Stored Procedure CALL addProduct('BR007','BRS01','A Waldorf Puppet',42.50, 'Made of wood and as a result, they are all different!');
-- Het Verwijderen van een Stored Procedure DROP PROCEDURE IF EXISTS addProduct;
Bij het aflsuiten van een querie gebruiken we een ;
Met de ; onderscheiden we twee verschillende queries van elkaar
Een Stored Procedure kan meerdere queries bevatten die met ; worden afgeslotten
Als je Stored Procedures schrijft dan moeten meerdere queries als één geheel worden gezien
Om deze reden definiëren we bij het schrijven van Stored Procedures in MySQL tijdelijk een andere delimiter
-- Het maken van een Stored Procedure voor het toevoegen van een product aan de Products tabel CREATE PROCEDURE addProduct @p_id char(10), @v_id char(10), @p_name char(255), @p_price decimal(8,2), @p_desc char(1000) AS BEGIN INSERT INTO Products([prod_id], [vend_id], [prod_name], [prod_price], [prod_desc]) VALUES(@p_id, @v_id, @p_name, @p_price, @p_desc) END GO
-- Het gebruiken van een Stored Procedure EXEC addProduct @p_id = 'BR007', @v_id = 'BRS01', @p_name = 'A Waldorf Puppet', @p_price = 42.50, @p_desc = 'Made of wood and as a result, they are all different';
-- Het Verwijderen van een Stored Procedure DROP PROCEDURE IF EXISTS addProduct;
SELECT * FROM Products ORDER BY prod_price;
| prod_id | vend_id | prod_name | prod_price | prod_desc |
| BNBG01 | DLL01 | Fish bean bag toy | 3.49 | Fish bean bag toy complete with bean bag worms with which to feed it |
| BNBG02 | DLL01 | Bird bean bag toy | 3.49 | Bird bean bag toy eggs are not included |
| BNBG03 | DLL01 | Rabbit bean bag toy | 3.49 | Rabbit bean bag toy comes with bean bag carrots |
| RGAN01 | DLL01 | Raggedy Ann | 4.99 | 18 inch Raggedy Ann doll |
| BR01 | BRS01 | 8 inch teddy bear | 5.99 | 8 inch teddy bear comes with cap and jacket |
| BR02 | BRS01 | 12 inch teddy bear | 8.99 | 12 inch teddy bear comes with cap and jacket |
| RYL01 | FNG01 | King doll | 9.49 | 12 inch king doll with royal garments and crown |
| RYL02 | FNG01 | Queen doll | 9.49 | 12 inch queen doll with royal garments and crown |
| BR03 | BRS01 | 18 inch teddy bear | 11.99 | 18 inch teddy bear comes with cap and jacket |
| BR007 | BRS01 | A Waldorf Puppet | 42.5 | Made of wood and as a result they are all different |