- •Методичка по курсовому проекту «MySql и php»
- •Простой пример Эта процедура просто выведет словосочетание «Привет мир» на англ. – «Hello world»
- •Простой пример Эта процедура просто выведет словосочетание «Привет мир» на англ. – «Hello world»
- •Пример in
- •Пример out
- •Переменные процедуры в хранимых процедурах также можно определить локальные переменные оператором declare.
- •Заполнение переменных из существующих таблиц
- •Sql операторы уникальные для хранимых процедур
- •Курсоры в MySql. Применение и синтаксис. Примеры.
- •Примеры курсоров
- •Пример 1
- •Основы языка php Константы
- •Переменные
- •Операторы сравнения
- •Логические операторы
- •Управляющие структуры Условные операторы
- •Оператор выбора
- •Пример 9
- •Использование массивов
- •Создание массива
- •Подсчет количества элементов
- •Пример 1
- •Управление массивами
- •Пример 6
- •Пример 7
- •Пример 8
- •Пример 9
- •Пример 10
- •Пример 11
- •Сортировки
- •Пример 12
- •Пример 1
- •Анализ строк
- •Управление строками
- •Работа с формами
- •Обработка ввода пользователя
- •Пример 2
- •Пример 3.1
- •Пример 3.2
- •Пример 4. Прием значений от checkbox-флажков.
- •Пример 5
- •Связь php с базой данных MySql
- •Пример 1
- •Пример 2.1
- •Пример 2.2
- •Пример 3.1
- •Пример 3.2
- •Описание
- •Пример 1. Пример использования mysql_connect()
- •Описание
- •Пример 1. Пример использования
Пример out
-
mysql> SET @x=”Something”;
-
mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;
-
mysql> CALL sp_out(@x);
-
mysql> SELECT @x
-
mysql> SET @x=”Something”;
-
mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;
-
mysql> CALL sp_out(@x);
-
mysql> SELECT @x
Пример INOUT
-
mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;
-
mysql> set @a = 5;
-
mysql> CALL sp_inout(@a);
-
mysql> SELECT @x
-
mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;
-
mysql> set @a = 5;
-
mysql> CALL sp_inout(@a);
-
mysql> SELECT @x
Переменные процедуры в хранимых процедурах также можно определить локальные переменные оператором declare.
-
mysql> DELIMITER |
-
mysql> CREATE PROCEDURE sp_declare (P INT)
-
-> BEGIN
-
-> DECLARE x INT;
-
-> DECLARE y INT DEFAULT 10;
-
-> SET x = P*y;
-
-> select x;
-
-> END|
-
mysql> DELIMITER ;
-
mysql> DELIMITER |
-
mysql> CREATE PROCEDURE sp_declare (P INT)
-
-> BEGIN
-
-> DECLARE x INT;
-
-> DECLARE y INT DEFAULT 10;
-
-> SET x = P*y;
-
-> select x;
-
-> END|
-
mysql> DELIMITER ;
Заполнение переменных из существующих таблиц
-
mysql> DELIMITER |
-
mysql> CREATE PROCEDURE sp_select ()
-
-> BEGIN
-
-> DECLARE x INT;
-
-> DECLARE y VARCHAR(10);
-
-> SELECT id,txt INTO x,y FROM sp_ins LIMIT 1;
-
-> SELECT x,y;
-
-> END|
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql> DELIMITER ;
-
mysql> CALL sp_select()\G
-
mysql> DELIMITER |
-
mysql> CREATE PROCEDURE sp_select ()
-
-> BEGIN
-
-> DECLARE x INT;
-
-> DECLARE y VARCHAR(10);
-
-> SELECT id,txt INTO x,y FROM sp_ins LIMIT 1;
-
-> SELECT x,y;
-
-> END|
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql> DELIMITER ;
-
mysql> CALL sp_select()\G
В помощь студенту и аспиранту
-
Главная
-
Карта сайта
-
Контакты
-
Закладки
Образовательная поддержка
Начало формы
![]()
|
Где искать: |
|
|
Конец формы
СТУДЕНТУ >> Базы данных (MySQL)
Хранимые процедуры MySQL(Часть 2)
|
|
|
Sql операторы уникальные для хранимых процедур
При написании процедуры может возникнуть необходимость использования условий или циклов, стандартный SQL язык не предназначен для этих целей. Для этих целей, SQL стандарт включается в себя набор операторов которые можно использовать лишь внутри хранимых процедур.
Условие: IF THEN ELSE
-
IF условие
-
THEN выражение;
-
ELSE выражение;
-
END IF
-
IF условие
-
THEN выражение;
-
ELSE выражение;
-
END IF
Логика проста. Если условие истинно, тогда выполняется набор условий, иначе другие условия.
Пример:
-
mysql> delimiter |
-
mysql> create procedure aorb(a int, b int)
-
-> begin
-
-> if (a>b) then select "A больше, чем B" as "Результат";
-
-> else select "B больше, чем A" as "Результат";
-
-> END IF;
-
-> END|
-
Query OK, 0 rows affected (0.01 sec)
-
mysql> delimiter;
-
mysql> delimiter |
-
mysql> create procedure aorb(a int, b int)
-
-> begin
-
-> if (a>b) then select "A больше, чем B" as "Результат";
-
-> else select "B больше, чем A" as "Результат";
-
-> END IF;
-
-> END|
-
Query OK, 0 rows affected (0.01 sec)
-
mysql> delimiter;
Условие: CASE
-
CASE переменная
-
WHEN условие выражение;
-
WHEN условие выражение;
-
ELSE выражение;
-
END CASE
-
CASE переменная
-
WHEN условие выражение;
-
WHEN условие выражение;
-
ELSE выражение;
-
END CASE
Вместо длинных вложенных операторов IF, использование оператора CASE позволяет код хранимой процедуры сделать более компактным и проще читаемым.
Пример:
-
delimiter |
-
CREATE PROCEDURE test_case(a int)
-
BEGIN
-
CASE a
-
WHEN 1 THEN SELECT "Один";
-
WHEN 2 THEN SELECT "Два";
-
WHEN 3 THEN SELECT "Три";
-
ELSE SELECT 'Нечто другое';
-
END CASE;
-
END|
-
delimiter ;
-
delimiter |
-
CREATE PROCEDURE test_case(a int)
-
BEGIN
-
CASE a
-
WHEN 1 THEN SELECT "Один";
-
WHEN 2 THEN SELECT "Два";
-
WHEN 3 THEN SELECT "Три";
-
ELSE SELECT 'Нечто другое';
-
END CASE;
-
END|
-
delimiter ;
Циклы: WHILE
Циклы это живой компонент процедуры – они позволяют определенному участку кода повторяться некоторое количество раз. WHILE циклы, первый тип циклов. Цикл повторяет блок операторов до тех пор, пока условие истинно.
-
WHILE условие DO
-
Выражение;
-
END WHILE
-
WHILE условие DO
-
Выражение;
-
END WHILE
Пример:
-
mysql> CREATE PROCEDURE test_while(IN a INT)
-
BEGIN
-
WHILE (a < 20) DO
-
SELECT a;
-
SET a=a + 1;
-
END WHILE;
-
END|
-
mysql> CREATE PROCEDURE test_while(IN a INT)
-
BEGIN
-
WHILE (a < 20) DO
-
SELECT a;
-
SET a=a + 1;
-
END WHILE;
-
END|
Циклы: REPEAT
-
REPEAT
-
выражение;
-
UNTIL условие
-
END REPEAT
-
REPEAT
-
выражение;
-
UNTIL условие
-
END REPEAT
Выражение повторяется до тех пор пока условие Until ложно, различие с циклом While в том, что этот цикл выполняется хотя бы один раз.
-
mysql> CREATE PROCEDURE test_repeat(IN a INT)
-
-> BEGIN
-
-> REPEAT
-
-> SELECT a;
-
-> SET a = a + 1;
-
-> UNTIL a > 5
-
-> END REPEAT;
-
-> END|
-
Query OK, 0 rows affected (0.00 sec)
-
mysql> CREATE PROCEDURE test_repeat(IN a INT)
-
-> BEGIN
-
-> REPEAT
-
-> SELECT a;
-
-> SET a = a + 1;
-
-> UNTIL a > 5
-
-> END REPEAT;
-
-> END|
-
Query OK, 0 rows affected (0.00 sec)
