Created
May 4, 2017 21:56
-
-
Save peterlafferty/0e8ef20be8d8e99697ed0bf59f4f38ee to your computer and use it in GitHub Desktop.
schema to demonstrate advanced stored procedures with MySQL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE DATABASE IF NOT EXISTS `hotel` /*!40100 DEFAULT CHARACTER SET utf8 */; | |
USE `hotel`; | |
-- MySQL dump 10.13 Distrib 5.7.17, for macos10.12 (x86_64) | |
-- | |
-- Host: localhost Database: hotel | |
-- ------------------------------------------------------ | |
-- Server version 5.7.18 | |
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | |
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; | |
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; | |
/*!40101 SET NAMES utf8 */; | |
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; | |
/*!40103 SET TIME_ZONE='+00:00' */; | |
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; | |
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | |
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | |
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; | |
-- | |
-- Table structure for table `Availability` | |
-- | |
DROP TABLE IF EXISTS `Availability`; | |
/*!40101 SET @saved_cs_client = @@character_set_client */; | |
/*!40101 SET character_set_client = utf8 */; | |
CREATE TABLE `Availability` ( | |
`idAvailability` int(11) NOT NULL AUTO_INCREMENT, | |
`idRoom` int(11) NOT NULL, | |
`numberAvailable` int(11) NOT NULL, | |
`price` decimal(10,2) NOT NULL, | |
`date` date NOT NULL, | |
PRIMARY KEY (`idAvailability`), | |
UNIQUE KEY `UNIQUE` (`idRoom`,`date`), | |
CONSTRAINT `fk_Availability_Room` FOREIGN KEY (`idRoom`) REFERENCES `Room` (`idRoom`) ON DELETE CASCADE ON UPDATE NO ACTION | |
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; | |
/*!40101 SET character_set_client = @saved_cs_client */; | |
-- | |
-- Dumping data for table `Availability` | |
-- | |
LOCK TABLES `Availability` WRITE; | |
/*!40000 ALTER TABLE `Availability` DISABLE KEYS */; | |
INSERT INTO `Availability` (`idAvailability`, `idRoom`, `numberAvailable`, `price`, `date`) VALUES (1,1,10,10.00,'2017-12-10'),(2,2,17,5.00,'2017-12-10'); | |
/*!40000 ALTER TABLE `Availability` ENABLE KEYS */; | |
UNLOCK TABLES; | |
-- | |
-- Table structure for table `Hotel` | |
-- | |
DROP TABLE IF EXISTS `Hotel`; | |
/*!40101 SET @saved_cs_client = @@character_set_client */; | |
/*!40101 SET character_set_client = utf8 */; | |
CREATE TABLE `Hotel` ( | |
`idHotel` int(11) NOT NULL AUTO_INCREMENT, | |
`name` varchar(45) NOT NULL, | |
PRIMARY KEY (`idHotel`) | |
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; | |
/*!40101 SET character_set_client = @saved_cs_client */; | |
-- | |
-- Dumping data for table `Hotel` | |
-- | |
LOCK TABLES `Hotel` WRITE; | |
/*!40000 ALTER TABLE `Hotel` DISABLE KEYS */; | |
INSERT INTO `Hotel` (`idHotel`, `name`) VALUES (1,'Peter\'s Pad'); | |
/*!40000 ALTER TABLE `Hotel` ENABLE KEYS */; | |
UNLOCK TABLES; | |
-- | |
-- Table structure for table `Room` | |
-- | |
DROP TABLE IF EXISTS `Room`; | |
/*!40101 SET @saved_cs_client = @@character_set_client */; | |
/*!40101 SET character_set_client = utf8 */; | |
CREATE TABLE `Room` ( | |
`idRoom` int(11) NOT NULL AUTO_INCREMENT, | |
`idHotel` int(11) NOT NULL, | |
`beds` tinyint(4) NOT NULL, | |
`capacity` tinyint(4) NOT NULL, | |
`price` decimal(10,2) NOT NULL, | |
`maxAvailable` int(11) NOT NULL, | |
PRIMARY KEY (`idRoom`), | |
KEY `fk_Room_Hotel_idx` (`idHotel`), | |
CONSTRAINT `fk_Room_Hotel` FOREIGN KEY (`idHotel`) REFERENCES `Hotel` (`idHotel`) ON DELETE CASCADE ON UPDATE NO ACTION | |
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; | |
/*!40101 SET character_set_client = @saved_cs_client */; | |
-- | |
-- Dumping data for table `Room` | |
-- | |
LOCK TABLES `Room` WRITE; | |
/*!40000 ALTER TABLE `Room` DISABLE KEYS */; | |
INSERT INTO `Room` (`idRoom`, `idHotel`, `beds`, `capacity`, `price`, `maxAvailable`) VALUES (1,1,1,2,10.00,10),(2,1,1,1,5.00,17); | |
/*!40000 ALTER TABLE `Room` ENABLE KEYS */; | |
UNLOCK TABLES; | |
-- | |
-- Dumping routines for database 'hotel' | |
-- | |
/*!50003 DROP PROCEDURE IF EXISTS `addAvailability` */; | |
/*!50003 SET @saved_cs_client = @@character_set_client */ ; | |
/*!50003 SET @saved_cs_results = @@character_set_results */ ; | |
/*!50003 SET @saved_col_connection = @@collation_connection */ ; | |
/*!50003 SET character_set_client = utf8 */ ; | |
/*!50003 SET character_set_results = utf8 */ ; | |
/*!50003 SET collation_connection = utf8_general_ci */ ; | |
/*!50003 SET @saved_sql_mode = @@sql_mode */ ; | |
/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; | |
DELIMITER ;; | |
CREATE PROCEDURE `addAvailability`( | |
IN p_idHotel INT, | |
IN p_date DATE | |
) | |
BEGIN | |
#variables | |
DECLARE v_done INT DEFAULT FALSE; | |
DECLARE v_idRoom INT; | |
DECLARE v_maxAvailable INT; | |
DECLARE v_price DECIMAL(10, 2); | |
#cursors | |
DECLARE cursorForRoom CURSOR FOR | |
SELECT | |
idRoom, | |
maxAvailable, | |
price | |
FROM | |
Room | |
WHERE | |
idHotel = p_idHotel; | |
#handlers | |
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; | |
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING | |
BEGIN | |
ROLLBACK; | |
RESIGNAL; | |
END; | |
IF NOT EXISTS(SELECT * FROM Room WHERE idHotel = p_idHotel) THEN | |
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No Rooms'; | |
END IF; | |
OPEN cursorForRoom; | |
START TRANSACTION; | |
read_loop: LOOP | |
FETCH cursorForRoom INTO v_idRoom, v_maxAvailable, v_price; | |
IF v_done THEN | |
LEAVE read_loop; | |
END IF; | |
INSERT INTO | |
Availability | |
SET | |
idAvailability = NULL, | |
idRoom = v_idRoom, | |
numberAvailable = v_maxAvailable, | |
price = v_price, | |
date = p_date; | |
END LOOP; | |
COMMIT; | |
CLOSE cursorForRoom; | |
END ;; | |
DELIMITER ; | |
/*!50003 SET sql_mode = @saved_sql_mode */ ; | |
/*!50003 SET character_set_client = @saved_cs_client */ ; | |
/*!50003 SET character_set_results = @saved_cs_results */ ; | |
/*!50003 SET collation_connection = @saved_col_connection */ ; | |
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; | |
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; | |
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; | |
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; | |
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | |
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; | |
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; | |
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; | |
-- Dump completed on 2017-05-04 22:55:14 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment