Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL erstellt eine gespeicherte Prozedursyntax mit Trennzeichen

Erste Schritte mit der Syntax gespeicherter Prozeduren in MySQL (unter Verwendung des Terminals):

1. Öffnen Sie ein Terminal und melden Sie sich wie folgt bei mysql an:

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

2. Sehen Sie nach, ob Sie Verfahren haben:

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)

Ich habe eine definiert, Sie haben wahrscheinlich keine, um damit anzufangen.

3. Zur Datenbank wechseln, löschen.

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, jetzt habe ich keine gespeicherten Prozeduren definiert. Machen Sie das einfachste:

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

// kommuniziert mit dem Terminal, wenn Sie mit der Eingabe von Befehlen für die gespeicherte Prozedur fertig sind. Der Name der gespeicherten Prozedur lautet foobar. es braucht keine Parameter und sollte "Hallo" zurückgeben.

5. Sehen Sie nach, ob es da ist, denken Sie daran, Ihr Trennzeichen zurückzusetzen!:

 mysql> show procedure status;
 -> 
 -> 

Erwischt! Warum hat das nicht funktioniert? Sie setzen das Trennzeichen auf // erinnern? Setzen Sie es zurück auf ;

6. Setzen Sie das Trennzeichen zurück und sehen Sie sich die Vorgehensweise an:

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. Führen Sie es aus:

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

Hallo Welt komplett, lass es uns mit etwas Besserem überschreiben.

8. Löschen Sie foobar, definieren Sie es neu, um einen Parameter zu akzeptieren, und führen Sie es erneut aus:

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)

Hübsch! Wir haben eine Prozedur erstellt, die Eingaben entgegennimmt, modifiziert und ausgibt. Jetzt machen wir eine Out-Variable.

9. Entfernen Sie foobar, erstellen Sie eine out-Variable und führen Sie sie aus:

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. Beispiel für die Verwendung von INOUT 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, es hat funktioniert, es hat die Fäden zusammengefügt. Sie haben also eine Variable msg definiert, diese Variable an die gespeicherte Prozedur namens foobar übergeben, und @msg wurde von foobar geschrieben.

Jetzt wissen Sie, wie Sie gespeicherte Prozeduren mit Trennzeichen erstellen. Setzen Sie dieses Tutorial hier fort und beginnen Sie mit Variablen in gespeicherten Prozeduren:http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/