Параметри процедури

У попередніх прикладах збережені процедури не містили параметрів. Як згадувалося раніше, кожен параметр може бути проголошений одним з модифікатором 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-параметрів, оскільки це призводить до нечитабельного і непослідовного коду.