Stored Procedure Programmierung in MySQL

MySQL bietet, wie andere Datenbanksysteme, die Funktionalität von sog. Stored Procedures oder auch Stored Routines genannt. Unter einer Stored Procedures versteht man das Ablegen einer eigenen Prozedur direkt in der Datenbank selbst. Die eigene Prozedure lässt sich über SQL ansprechen und ausführen. Man kann innerhalb der Prozedur im Grunde alle bekannten SQL Befehle nutzen und man kann sogar Parameter an die Stored Procedures übergben.

Damit die ganze Anleitung etwas griffiger wird, nehmen wir in diesem Beispiel zur Grundlage eine Tabelle products. Hierfür erstellen wir zunächst die Tabelle mit ein paar Testdatensätzen:

CREATE TABLE IF NOT EXISTS `product` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) DEFAULT NULL,
  `short_desc` varchar(50) DEFAULT NULL,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `modified` timestamp NULL DEFAULT NULL,
  `deleted` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
 
INSERT INTO `product` (`id`, `user_id`, `short_desc`, `created`, `modified`, `deleted`) VALUES
	(1, 10, 'test product', '2013-12-06 18:40:29', '2013-12-11 09:15:36', NULL),
	(2, 20, 'special product', '2013-12-10 23:32:53', '2013-12-11 09:15:18', NULL),
	(3, 23, 'new product', '2013-12-11 09:14:48', '2013-12-11 09:15:05', NULL);

Nun erstellen wir die Strored Procedure mit einem einfachen SELECT Statement

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_all_products`()
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT 'get all products from table'
BEGIN
SELECT * FROM product;
END

Wenn das alles geklappt hat, kann man nun die eigene Strored Procedure mit dem Befehl CALL aufrufen:

CALL `get_all_products`();

Und erhält man, wie im Select Statement angegeben, alle Spalten der Tabelle products:

ausgabe der stored procedure

Soweit so gut, jetzt erweitern wir das Beispiel ein wenig und übergeben die ID eines gewünschten Produktes an das Select Statement innerhalb der Strored Procedure. Hierfür erstellen wir eine weitere Strored Procedure get_all_products_by_id mit dem folgenden Create Statement

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_all_products_by_id`(IN ` prod_id ` INT)
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT 'get all products from table by id'
BEGIN
SELECT * FROM product WHERE prod_id=id;
END

Wenndas wiederum geklappt hat, kann man nun die eigene Strored Procedure wieder mit dem Befehl CALL aufrufen und die gewünschte ID des Produktes übergben:

CALL `get_all_products`(2);

Und man erhält das Ergebnis:

screenshot myql stored procedure

http://www.agile-coding.net/stored-procedure-programmierung-in-mysql/