Pierwsze kroki ze składnią procedury składowanej w MySQL (przy użyciu terminala):
1. Otwórz terminal i zaloguj się do mysql w ten sposób:
[email protected]:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>
2. Sprawdź, czy masz jakieś procedury:
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)
Mam jedną zdefiniowaną, prawdopodobnie nie masz żadnego na początek.
3. Zmień bazę danych, usuń ją.
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, więc teraz nie mam zdefiniowanych procedur składowanych. Zrób najprostszy:
mysql> delimiter //
mysql> create procedure foobar()
-> begin select 'hello'; end//
Query OK, 0 rows affected (0.00 sec)
// będzie komunikować się z terminalem po zakończeniu wprowadzania poleceń dla procedury składowanej. nazwa procedury składowanej to foobar. nie przyjmuje parametrów i powinien zwrócić "cześć".
5. Sprawdź, czy tam jest, pamiętaj, aby cofnąć ogranicznik!:
mysql> show procedure status;
->
->
Gotcha! Dlaczego to nie zadziałało? Ustawiłeś ogranicznik na //
Zapamiętaj? Ustaw go z powrotem na ;
6. Cofnij ogranicznik i spójrz na procedurę:
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. Uruchom to:
mysql> call foobar();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Witaj, świecie kompletny, nadpiszmy go czymś lepszym.
8. Usuń foobar, przedefiniuj go, aby zaakceptować parametr, i uruchom go ponownie:
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)
Ładny! Stworzyliśmy procedurę, która pobiera dane wejściowe, modyfikuje je i generuje dane wyjściowe. Teraz zróbmy zmienną out.
9. Usuń foobar, zrób zmienną out, uruchom ją:
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. Przykład użycia INOUT w 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, zadziałało, połączyło struny. Więc zdefiniowałeś zmienną msg, przekazałeś w tej zmiennej procedurę składowaną o nazwie foobar, a @msg został zapisany przez foobar.
Teraz wiesz, jak tworzyć procedury składowane z ogranicznikami. Kontynuuj ten samouczek tutaj, zacznij od zmiennych w procedurach składowanych:http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/