WCMC – Måndag 23/11 Stored Procedures

MySQL Stored Procedures lagrar ett stycke SQL frågor (SELECT, INSERT, UPDATE, DELETE) under ett namn. Du kan sedan anropa din procedure med kommandot ”CALL”.

Läs mer om MySQL stored procedures här och här.

Fördelar med stored procedures:

  • Har en tendens att förbättra prestanda av applikationer (t.ex. webbplatser).
  • Minskar datatrafik mellan applikation och databas.
  • De är återanvändbara och kan användas av alla applikationer som kan prata med databasen.
  • De säkra, och kan ha olika

Nackdelar med stored procedures:

  • Om du använder många stored procedures kan minnesanvändningen på databasservern öka för var uppkoppling.
  • De kan vara svåra att underhålla, speciellt när du använder procedures inuti andra procedures (svårt att överblicka).
  • Det är svårt att debugga procedures då de måste skapas om hela tiden.

Stored procedure syntax:

Procedure utan parametrar (utan variabler):

CREATE PROCEDURE

# -- get all products procedure
-- change delimiter to something other than ;
-- to avoid ending our CREATE PROCEDURE statement too early
DELIMITER //


CREATE PROCEDURE get_all_products()
  BEGIN
    SELECT
      *
    FROM
      products; 
  END// -- end of CREATE PROCEDURE, using our temporary delimiter


-- change delimiter back to ;
-- to make sure that our SQL runs as expected once the procedure has been created
DELIMITER ;

Koden ovan ställer först om MySQLs delimiter från semikolon (;) till dubbelslash (//) för att se till att hela vårt CREATE PROCEDURE kommando körs utan att avbrytas av de SQL påståenden den innehåller.

Koden skapar sedan en procedure som heter get_all_products som innehåller en SELECT fråga.

När vi skapat våran procedure återställer vi MySQLs delimiter till semikolon (;).

CALL PROCEDURE

För att anropa vår procedure använder vi kommandot ”CALL”:

# -- call procedure
CALL get_all_products();

Procedure med parametrar:

CREATE PROCEDURE

# -- get all products procedure
-- change delimiter to something other than ;
-- to avoid ending our CREATE PROCEDURE statement too early
DELIMITER //


CREATE PROCEDURE get_product(product_id INT(11))
  BEGIN
    SELECT
      *
    FROM
      products
    WHERE
      -- product_id is our parameter, which is sent in to the
      -- procedure whenever it is called (using CALL)
      p_id = product_id;
  END// -- end of CREATE PROCEDURE, using our temporary delimiter


-- change delimiter back to ;
-- to make sure that our SQL runs as expected once the procedure has been created
DELIMITER ;

CALL PROCEDURE

# -- call procedure
CALL get_product(1); -- get product with the id 1

# -- call procedure
CALL get_product(3); -- get product with the id 3
0 votes