Значительное преимущество хранимых процедур в том, что они могут как принимать, так и передавать значения.
Существует три типа параметров:
IN: По умолчанию. Этот параметр принимается процедурой и может изменяться внутри процедуру, но не может изменятся вне процедуры.
OUT: Никакие значения не передаются (это означает что они имеют значение NULL), но они могут быть изменены внутри процедуры, а также изменены вне процедуры.
INOUT: Совмещает в себе свойства параметров IN и OUT. Значение может передаваться в процедуру, изменяться внутри процедуры и быть доступным вне процедуры.
Пример IN
Данный пример хранимой процедуры демонстрирует использование IN параметра. Так как параметр IN используется по умолчанию, его можно не писать.
1. mysql> CREATE PROCEDURE sp_in(p VARCHAR(11)) SET @x = P;
2. mysql> CALL sp_in('Hello world');
3. mysql> SELECT @x
1. mysql> CREATE PROCEDURE sp_in(p VARCHAR(11)) SET @x = P;
2. mysql> CALL sp_in('Hello world');
3. mysql> SELECT @x
Пример OUT
1. mysql> SET @x=”Something”;
2. mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;
3. mysql> CALL sp_out(@x);
4. mysql> SELECT @x
1. mysql> SET @x=”Something”;
2. mysql> CREATE PROCEDURE sp_out(OUT p VARCHAR(10)) SET P=”Hello world”;
3. mysql> CALL sp_out(@x);
4. mysql> SELECT @x
Пример INOUT
1. mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;
2. mysql> set @a = 5;
3. mysql> CALL sp_inout(@a);
4. mysql> SELECT @x
1. mysql> CREATE PROCEDURE sp_inout(INOUT P INT) SET @x=P*2;