sql >> Database >  >> RDS >> Mysql

MySQL maakt syntaxis voor opgeslagen procedures met scheidingsteken

Aan de slag met de syntaxis van opgeslagen procedures in MySQL (met behulp van de terminal):

1. Open een terminal en log als volgt in op mysql:

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

2. Kijk eens of je procedures hebt:

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)

Ik heb er een gedefinieerd, je hebt er waarschijnlijk geen om mee te beginnen.

3. Ga naar de database, verwijder deze.

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, dus nu heb ik geen opgeslagen procedures gedefinieerd. Maak de eenvoudigste:

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

De // communiceert met de terminal wanneer u klaar bent met het invoeren van opdrachten voor de opgeslagen procedure. de naam van de opgeslagen procedure is foobar. er zijn geen parameters voor nodig en zou "hallo" moeten retourneren.

5. Kijk of het er is, vergeet niet je scheidingsteken terug te zetten!:

 mysql> show procedure status;
 -> 
 -> 

Gotcha! Waarom werkte dit niet? U stelt het scheidingsteken in op // onthouden? Zet het terug op ;

6. Zet het scheidingsteken terug en bekijk de procedure:

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. Voer het uit:

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

Hallo wereld compleet, laten we het overschrijven met iets beters.

8. Laat foobar vallen, herdefinieer het om een ​​parameter te accepteren en voer het opnieuw uit:

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)

Leuk! We hebben een procedure gemaakt die invoer neemt, deze aanpast en uitvoert. Laten we nu een out variabele doen.

9. Foobar verwijderen, een out-variabele maken, uitvoeren:

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. Voorbeeld van INOUT-gebruik in 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 het werkte, het voegde de snaren samen. Dus je definieerde een variabele msg, gaf die variabele door aan de opgeslagen procedure genaamd foobar, en @msg werd geschreven door foobar.

Nu weet u hoe u opgeslagen procedures met scheidingstekens kunt maken. Ga hier verder met deze tutorial, begin met variabelen binnen opgeslagen procedures:http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/



  1. MySQL invoegen in meerdere tabellen? (Database normalisatie?)

  2. Android - Hoe kan ik gegevens met betrekking tot twee tabellen doorgeven aan een invoegmethode van een inhoudsprovider?

  3. Hoe de sortering van database, tabel, kolom wijzigen?

  4. Alle triggers uit een database in SQL Server verwijderen of verwijderen?