Created
February 10, 2026 14:21
-
-
Save sunmeat/af172bdfa17d660f445c78897c5c79d5 to your computer and use it in GitHub Desktop.
змінні, умови, цикли, курсори, процедури в MySQL
This file contains hidden or 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
| /* ========================================================= | |
| DEMO: змінні, умови, цикли, курсори, процедури (MySQL) | |
| ========================================================= */ | |
| /* ---------- очистка ---------- */ | |
| DROP PROCEDURE IF EXISTS demo_all; | |
| DROP PROCEDURE IF EXISTS rectangle; | |
| DROP TABLE IF EXISTS Product; | |
| /* ---------- таблиця ---------- */ | |
| CREATE TABLE Product ( | |
| id INT AUTO_INCREMENT PRIMARY KEY, | |
| name VARCHAR(50) | |
| ); | |
| INSERT INTO Product (name) VALUES | |
| ('Хліб'), | |
| ('Молоко'), | |
| ('Сир'); | |
| /* ---------- процедура rectangle ---------- */ | |
| DELIMITER $$ | |
| CREATE PROCEDURE rectangle ( | |
| IN width DOUBLE, | |
| IN height DOUBLE, | |
| OUT square DOUBLE, | |
| OUT perimeter DOUBLE | |
| ) | |
| BEGIN | |
| SET square = width * height; | |
| SET perimeter = (width + height) * 2; | |
| END$$ | |
| /* ---------- головна процедура ---------- */ | |
| CREATE PROCEDURE demo_all() | |
| BEGIN | |
| /* ===== змінні ===== */ | |
| DECLARE age INT DEFAULT 36; | |
| DECLARE username VARCHAR(50) DEFAULT 'Олег'; | |
| DECLARE a INT DEFAULT 3; | |
| /* ===== змінні для курсора ===== */ | |
| DECLARE done INT DEFAULT 0; | |
| DECLARE product_name VARCHAR(50); | |
| /* ===== курсор ===== */ | |
| DECLARE cur_products CURSOR FOR | |
| SELECT name FROM Product; | |
| DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; | |
| /* ===== вивід ===== */ | |
| SELECT age AS age; | |
| SELECT CONCAT( | |
| 'привіт! мене звуть ', | |
| username, | |
| '. мені ', | |
| age, | |
| ' років' | |
| ) AS greeting; | |
| /* ===== умова ===== */ | |
| IF age >= 18 THEN | |
| SELECT 'повнолітній' AS status; | |
| ELSE | |
| SELECT 'неповнолітній' AS status; | |
| END IF; | |
| /* ===== цикл ===== */ | |
| WHILE a > 0 DO | |
| SELECT CONCAT('лічильник = ', a) AS counter; | |
| SET a = a - 1; | |
| END WHILE; | |
| /* ===== курсор ===== */ | |
| OPEN cur_products; | |
| read_loop: LOOP | |
| FETCH cur_products INTO product_name; | |
| IF done = 1 THEN | |
| LEAVE read_loop; | |
| END IF; | |
| SELECT CONCAT('товар: ', product_name) AS product; | |
| END LOOP; | |
| CLOSE cur_products; | |
| END$$ | |
| DELIMITER ; | |
| /* ---------- запуск ---------- */ | |
| CALL demo_all(); | |
| CALL rectangle(10.5, 15.5, @s, @p); | |
| SELECT @s AS square, @p AS perimeter; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment