Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL tworzy składnię procedury składowanej z ogranicznikiem

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/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL nie może dodać ograniczenia klucza obcego

  2. Mierzenie rzeczywistego czasu zapytania MySQL

  3. Błąd mySQL 1040:Za dużo połączeń

  4. Jak uzyskać resztę za pomocą MOD() w PostgreSQL, MS SQL Server i MySQL?

  5. Jak zmienić sekundy na wartość czasu w MySQL?