Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL crée une syntaxe de procédure stockée avec délimiteur

Démarrer avec la syntaxe des procédures stockées dans MySQL (à l'aide du terminal) :

1. Ouvrez un terminal et connectez-vous à mysql comme ceci :

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

2. Jetez un œil pour voir si vous avez des procédures :

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)

J'en ai défini un, vous n'en avez probablement aucun pour commencer.

3. Accédez à la base de données, supprimez-la.

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. Ok donc maintenant je n'ai pas de procédures stockées définies. Faites le plus simple :

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

Le // communiquera avec le terminal lorsque vous aurez fini d'entrer des commandes pour la procédure stockée. le nom de la procédure stockée est foobar. il ne prend aucun paramètre et doit renvoyer "hello".

5. Regardez s'il est là, pensez à remettre votre délimiteur ! :

 mysql> show procedure status;
 -> 
 -> 

Je t'ai eu! Pourquoi cela n'a-t-il pas fonctionné ? Vous définissez le délimiteur sur // rappelles toi? Remettez-le à ;

6. Remettez le délimiteur en arrière et regardez la procédure :

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. Exécutez-le :

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

Bonjour tout le monde, écrasons-le avec quelque chose de mieux.

8. Supprimez foobar, redéfinissez-le pour accepter un paramètre, puis relancez-le :

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)

Joli! Nous avons créé une procédure qui prend des entrées, les modifie et produit des sorties. Faisons maintenant une variable de sortie.

9. Supprimez foobar, créez une variable out, exécutez-la :

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. Exemple d'utilisation de INOUT dans 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)

Ok ça a marché, ça a joint les cordes ensemble. Vous avez donc défini une variable msg, passée dans cette variable dans une procédure stockée appelée foobar, et @msg a été écrit par foobar.

Vous savez maintenant créer des procédures stockées avec des délimiteurs. Continuez ce didacticiel ici, commencez par les variables dans les procédures stockées :http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/