Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL създава синтаксис на съхранена процедура с разделител

Първи стъпки със синтаксиса на съхранени процедури в MySQL (с помощта на терминала):

1. Отворете терминал и влезте в mysql по следния начин:

[email protected]:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> 

2. Разгледайте дали имате някакви процедури:

mysql> show procedure status;
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name          | Type      | Definer | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
|   yourdb  | sp_user_login | PROCEDURE | [email protected]%  | 2013-12-06 14:10:25 | 2013-12-06 14:10:25 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)

Имам едно дефинирано, вие вероятно нямате какво да започнете.

3. Променете в базата данни, изтрийте я.

mysql> use yourdb;
Database changed

mysql> drop procedure if exists sp_user_login;
Query OK, 0 rows affected (0.01 sec)
    
mysql> show procedure status;
Empty set (0.00 sec)
    

4. Добре, така че сега нямам дефинирани съхранени процедури. Направете най-простия:

mysql> delimiter //
mysql> create procedure foobar()
    -> begin select 'hello'; end//
Query OK, 0 rows affected (0.00 sec)

// ще комуникира с терминала, когато приключите с въвеждането на команди за съхранената процедура. името на съхранената процедура е foobar. не приема параметри и трябва да връща "здравей".

5. Вижте дали е там, не забравяйте да зададете обратно своя разделител!:

 mysql> show procedure status;
 -> 
 -> 

Хванах те! Защо това не проработи? Задавате разделителя на // помня? Задайте го обратно на ;

6. Поставете обратно разделителя и вижте процедурата:

mysql> delimiter ;
mysql> show procedure status;
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| yourdb    | foobar | PROCEDURE | [email protected] | 2013-12-06 14:27:23 | 2013-12-06 14:27:23 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

   

7. Стартирайте го:

mysql> call foobar();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Здравей свят, завършен, нека го презапишем с нещо по-добро.

8. Пуснете foobar, предефинирайте го, за да приеме параметър, и го стартирайте отново:

mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status;
Empty set (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar (in var1 int)
    -> begin select var1 + 2 as result;
    -> end//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call foobar(5);
+--------+
| result |
+--------+
|      7 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Хубаво! Направихме процедура, която приема вход, модифицира го и прави изход. Сега нека направим изходяща променлива.

9. Премахнете foobar, направете променлива, стартирайте я:

mysql> delimiter ;
mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar(out var1 varchar(100))
    -> begin set var1="kowalski, what's the status of the nuclear reactor?";
    -> end//
Query OK, 0 rows affected (0.00 sec)


mysql> delimiter ;
mysql> call foobar(@kowalski_status);
Query OK, 0 rows affected (0.00 sec)

mysql> select @kowalski_status;
+-----------------------------------------------------+
| @kowalski_status                                    |
+-----------------------------------------------------+
| kowalski, what's the status of the nuclear reactor? |
+-----------------------------------------------------+
1 row in set (0.00 sec)

10. Пример за използване на INOUT в MySQL:

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)


mysql> delimiter //
mysql> create procedure foobar (inout msg varchar(100))
-> begin
-> set msg = concat(@msg, " never gonna let you down");
-> end//


mysql> delimiter ;


mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)


mysql> select @msg;
+-----------------------------------+
| @msg                              |
+-----------------------------------+
| ricksays never gonna let you down |
+-----------------------------------+
1 row in set (0.00 sec)

Добре, сработи, съедини струните заедно. Така че дефинирахте променлива msg, предадохте в нея в съхранената процедура, наречена foobar, и @msg беше записан от foobar.

Сега знаете как да правите съхранени процедури с разделители. Продължете този урок тук, започнете с променливи в съхранените процедури:http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на уеб приложение от нулата с помощта на Python Flask и MySQL:част 3

  2. mysql_real_escape_string() повреден ли е?

  3. MySQL тригер при събития за вмъкване/актуализация

  4. Многоезичен уебсайт с най-добри практики

  5. Генериране на дърво на базата на дълбочина от йерархични данни в MySQL (без CTEs)