Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая MySQL и PHP.doc
Скачиваний:
41
Добавлен:
16.12.2018
Размер:
896 Кб
Скачать

Пример out

  1. mysql> SET @x=”Something”;  

  2. mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;  

  3. mysql> CALL sp_out(@x);  

  4. mysql> SELECT @x   

  1. mysql> SET @x=”Something”;  

  2. mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;  

  3. mysql> CALL sp_out(@x);  

  4. mysql> SELECT @x   

Пример INOUT

  1. mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;  

  2. mysql> set @a = 5;  

  3. mysql> CALL sp_inout(@a);  

  4. mysql> SELECT @x  

  1. mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;  

  2. mysql> set @a = 5;  

  3. mysql> CALL sp_inout(@a);  

  4. mysql> SELECT @x  

Переменные процедуры в хранимых процедурах также можно определить локальные переменные оператором declare.

  1. mysql> DELIMITER |  

  2. mysql> CREATE PROCEDURE sp_declare (P INT)  

  3.    -> BEGIN  

  4.    ->  DECLARE x INT;  

  5.     ->  DECLARE y INT DEFAULT 10;  

  6.     ->  SET x = P*y;  

  7.     ->  select x;  

  8.     -> END|  

  9. mysql> DELIMITER ;   

  1. mysql> DELIMITER |  

  2. mysql> CREATE PROCEDURE sp_declare (P INT)  

  3.    -> BEGIN  

  4.    ->  DECLARE x INT;  

  5.     ->  DECLARE y INT DEFAULT 10;  

  6.     ->  SET x = P*y;  

  7.     ->  select x;  

  8.     -> END|  

  9. mysql> DELIMITER ;   

Заполнение переменных из существующих таблиц

  1. mysql> DELIMITER |  

  2. mysql> CREATE PROCEDURE sp_select ()  

  3.     -> BEGIN  

  4.     ->  DECLARE x INT;  

  5.     ->  DECLARE y VARCHAR(10);  

  6.     ->  SELECT id,txt INTO x,y FROM sp_ins LIMIT 1;  

  7.     ->  SELECT x,y;  

  8.     -> END|  

  9. Query OK, 0 rows affected (0.00 sec)  

  10.   

  11. mysql> DELIMITER ;  

  12. mysql> CALL sp_select()\G  

  1. mysql> DELIMITER |  

  2. mysql> CREATE PROCEDURE sp_select ()  

  3.     -> BEGIN  

  4.     ->  DECLARE x INT;  

  5.     ->  DECLARE y VARCHAR(10);  

  6.     ->  SELECT id,txt INTO x,y FROM sp_ins LIMIT 1;  

  7.     ->  SELECT x,y;  

  8.     -> END|  

  9. Query OK, 0 rows affected (0.00 sec)  

  10.   

  11. mysql> DELIMITER ;  

  12. mysql> CALL sp_select()\G  

В помощь студенту и аспиранту

  • Главная

  • Карта сайта

  • Контакты

  • Закладки

Образовательная поддержка

Начало формы

Где искать:

Статьи

Диссертации

Конец формы

СТУДЕНТУ >> Базы данных (MySQL)

Хранимые процедуры MySQL(Часть 2)

Укажите ЛЮБУЮ фамилию и читайте о ней ВСЕ! Данные на КАЖДОГО жителя РФ


Загрузите ФОТО, посмотрите на СЕБЯ в СТАРОСТИ прямо сейчас!


Живот исчезнет через 7 дней, Жир с боков за 10! Диета Малышевой (-6кг за 7 дней)


Sql операторы уникальные для хранимых процедур

При написании процедуры может возникнуть необходимость использования условий или циклов, стандартный SQL язык не предназначен для этих целей. Для этих целей, SQL стандарт включается в себя набор операторов которые можно использовать лишь внутри хранимых процедур.

Условие: IF THEN ELSE

  1. IF условие   

  2. THEN выражение;   

  3. ELSE выражение;  

  4. END IF  

  1. IF условие   

  2. THEN выражение;   

  3. ELSE выражение;  

  4. END IF  

Логика проста. Если условие истинно, тогда выполняется набор условий, иначе другие условия.

Пример:

  1. mysql> delimiter |  

  2. mysql> create procedure aorb(a int, b int)  

  3.     -> begin  

  4.     -> if (a>b) then select "A больше, чем B" as "Результат";  

  5.     -> else select "B больше, чем A" as "Результат";  

  6.     -> END IF;  

  7.     -> END|  

  8. Query OK, 0 rows affected (0.01 sec)  

  9. mysql> delimiter;  

  1. mysql> delimiter |  

  2. mysql> create procedure aorb(a int, b int)  

  3.     -> begin  

  4.     -> if (a>b) then select "A больше, чем B" as "Результат";  

  5.     -> else select "B больше, чем A" as "Результат";  

  6.     -> END IF;  

  7.     -> END|  

  8. Query OK, 0 rows affected (0.01 sec)  

  9. mysql> delimiter;  

Условие: CASE

  1. CASE переменная   

  2. WHEN условие выражение;   

  3. WHEN условие выражение;  

  4. ELSE выражение;  

  5. END CASE  

  1. CASE переменная   

  2. WHEN условие выражение;   

  3. WHEN условие выражение;  

  4. ELSE выражение;  

  5. END CASE  

Вместо длинных вложенных операторов IF, использование оператора CASE позволяет код хранимой процедуры сделать более компактным и проще читаемым.

Пример:

  1. delimiter |  

  2. CREATE PROCEDURE test_case(a int)   

  3. BEGIN   

  4.  CASE a  

  5.   WHEN 1 THEN SELECT "Один";   

  6.   WHEN 2 THEN SELECT "Два";   

  7.   WHEN 3 THEN SELECT "Три";  

  8.   ELSE SELECT 'Нечто другое';   

  9.  END CASE;   

  10. END|  

  11. delimiter ;  

  1. delimiter |  

  2. CREATE PROCEDURE test_case(a int)   

  3. BEGIN   

  4.  CASE a  

  5.   WHEN 1 THEN SELECT "Один";   

  6.   WHEN 2 THEN SELECT "Два";   

  7.   WHEN 3 THEN SELECT "Три";  

  8.   ELSE SELECT 'Нечто другое';   

  9.  END CASE;   

  10. END|  

  11. delimiter ;  

Циклы: WHILE

Циклы это живой компонент процедуры – они позволяют определенному участку кода повторяться некоторое количество раз. WHILE циклы, первый тип циклов. Цикл повторяет блок операторов до тех пор, пока условие истинно.

  1. WHILE условие DO  

  2. Выражение;  

  3. END WHILE  

  1. WHILE условие DO  

  2. Выражение;  

  3. END WHILE  

Пример:

  1. mysql> CREATE PROCEDURE test_while(IN a INT)  

  2. BEGIN   

  3.  WHILE (a < 20) DO   

  4.   SELECT a;   

  5.   SET a=a + 1;   

  6.  END WHILE;  

  7. END|  

  1. mysql> CREATE PROCEDURE test_while(IN a INT)  

  2. BEGIN   

  3.  WHILE (a < 20) DO   

  4.   SELECT a;   

  5.   SET a=a + 1;   

  6.  END WHILE;  

  7. END|  

Циклы: REPEAT

  1. REPEAT   

  2. выражение;  

  3. UNTIL условие  

  4. END REPEAT  

  1. REPEAT   

  2. выражение;  

  3. UNTIL условие  

  4. END REPEAT  

Выражение повторяется до тех пор пока условие Until ложно, различие с циклом While в том, что этот цикл выполняется хотя бы один раз.

  1. mysql> CREATE PROCEDURE test_repeat(IN a INT)  

  2.     -> BEGIN  

  3.     ->  REPEAT  

  4.     ->   SELECT a;  

  5.     ->   SET a = a + 1;  

  6.     ->   UNTIL a > 5  

  7.     ->  END REPEAT;  

  8.     -> END|  

  9. Query OK, 0 rows affected (0.00 sec)  

  1. mysql> CREATE PROCEDURE test_repeat(IN a INT)  

  2.     -> BEGIN  

  3.     ->  REPEAT  

  4.     ->   SELECT a;  

  5.     ->   SET a = a + 1;  

  6.     ->   UNTIL a > 5  

  7.     ->  END REPEAT;  

  8.     -> END|  

  9. Query OK, 0 rows affected (0.00 sec)