Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created February 10, 2026 14:21
Show Gist options
  • Select an option

  • Save sunmeat/af172bdfa17d660f445c78897c5c79d5 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/af172bdfa17d660f445c78897c5c79d5 to your computer and use it in GitHub Desktop.
змінні, умови, цикли, курсори, процедури в MySQL
/* =========================================================
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