Параметри процедури
У попередніх прикладах збережені процедури не містили параметрів. Як згадувалося раніше, кожен параметр може бути проголошений одним з модифікатором IN, OUT або INOUT. У наступному прикладі наводиться приклад функції, яка присвоює змінній користувача @ х нове значення.
Приклад:
CREATE PROCEDURE set_K (IN value INT)
BEGIN
SET @x = value;
END //
CALL set_x(123456)//
SELECT @x//
@x
123456
Як видно з прикладу, через параметр value функції передається числове значення 123456, яке вона присвоює змінній користувача @ х. Модифікатор in повідомляє СКБД MySQL, що за допомогою параметра value користувачі передають дані всередину функції.
Зауваження:
- На відміну від змінної @ х, яка є глобальною і доступна як всередині збереженої процедури set_x (), так і поза нею, параметри функції є локальними і доступні для використання тільки усередині функції.
Використання ключового слова in не є обов'язковим - якщо жоден з модифікаторів не вказано, СУБД MySQL вважає, що параметр оголошений з модифікатором IN.
CREATE PROCEDURE set_y (value INT)
BEGIN
SET value = 7;
SET @x = value;
END //
SET @val = 123456//
CALL set_y(@val)
@val
123456
Зауваження:
- Слід зазначити, що імена параметрів при оголошенні збереженої процедури і при виклику не обов'язково повинні збігатися. Усередині процедури всі локальні змінні використовуються без символу @ в той час як для глобальних змінних символ перед ім'ям обов'язковий4
Процедура set_y () приймає єдиний iN-параметр value, за допомогою оператора set значення параметра змінюється всередині функції. Однак, як видно з прикладу вище, після виконання процедури, що значення користувача змінної @ val, переданої функції як параметр, не змінюється. Якщо потрібно, щоб значення змінної піддавалося зміні, необхідно оголосити параметр процедури з модифікатором out (приклад).
Приклад:
CREATE PROCEDURE set_y (OUT value INT)
BEGIN
SET @x = value;
SET value = 7;
END//
SET @val = 123456//
CALL set_y(@val)//
SELECT @x,@val//
@x @val
Null 7
Як видно з прикладу, при використанні модифікатора OUT будь-які зміни параметра всередині процедури відображаються на змінній. Передача у якості значення змінної дозволяє використовувати результат процедури для подальших обчислень. Однак передати значення всередину функції за допомогою OUT-параметра вже не вийде.
Зауваження:
- Якщо локальна або користувацька змінні не ініціюються за допомогою оператора SET чи ключового слова DEFAULT, вони отримують значення NULL.
Для того щоб через параметр можна було і передати значення всередину процедури, і отримати значення, яке потрапляє в параметр в результаті обчислень всередині процедури, його слід оголосити з модифікатором INOUT (приклад).
CREATE PROCEDURE set_y (INOUT value INT)
BEGIN
SET @x = value;
SET value = 7;
END //
SET @val = 123456//
CALL set_y(@val)//
SELECT @x, @val//
@x @val
123456 7
Тепер через параметр value можна як передавати значення всередину процедури, так і витягувати значення, які отримує параметр всередині процедури. Проте рекомендується використовувати тільки IN-і ОІТ-параметри, не вдаючись до комбінованих INOUT-параметрів, оскільки це призводить до нечитабельного і непослідовного коду.