sql >> Database teknologi >  >> RDS >> Mysql

MySQL oprette lagrede procedure syntaks med afgrænser

Kom godt i gang med syntaks for lagrede procedurer i MySQL (ved hjælp af terminalen):

1. Åbn en terminal og log ind på mysql sådan her:

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

2. Tag et kig for at se, om du har nogle procedurer:

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)

Jeg har en defineret, du har sandsynligvis ingen at starte ud.

3. Skift til databasen, slet den.

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, så nu har jeg ingen lagrede procedurer defineret. Lav den enkleste:

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

// vil kommunikere til terminalen, når du er færdig med at indtaste kommandoer for den lagrede procedure. navnet på den lagrede procedure er foobar. den tager ingen parametre og burde returnere "hej".

5. Se om det er der, husk at sætte din afgrænsning tilbage!:

 mysql> show procedure status;
 -> 
 -> 

Godt! Hvorfor virkede dette ikke? Du indstiller afgrænseren til // Husk? Indstil den tilbage til ;

6. Sæt afgrænsningen tilbage og se på proceduren:

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. Kør det:

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

Hej verden komplet, lad os overskrive den med noget bedre.

8. Drop foobar, omdefiner den for at acceptere en parameter, og kør den igen:

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)

Pæn! Vi lavede en procedure, der tager input, ændrer det og laver output. Lad os nu lave en ud-variabel.

9. Fjern foobar, lav en ud-variabel, kør den:

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. Eksempel på INOUT-brug i 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 det virkede, det slog strengene sammen. Så du definerede en variabel msg, overført i den variabel til den lagrede procedure kaldet foobar, og @msg blev skrevet til af foobar.

Nu ved du, hvordan du laver lagrede procedurer med afgrænsninger. Fortsæt denne vejledning her, start med variabler inden for lagrede procedurer:http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/



  1. Bridging RDBMS og NoSQL:Introduktion til 2DX UI cluster

  2. isolering af en understreng i en streng før et symbol i SQL Server 2008

  3. Hvordan man kortlægger en streng til DB-sekvens i Hibernate

  4. Sådan sammenlignes to tabeller kolonne for kolonne i orakel