Збережені процедури
СУБД MySQL підтримує процедури, що зберігаються. Під цим терміном розуміється послідовність операцій, що зберігається як єдине ціле в каталозі бази даних на сервері. Програми можуть викликати та запускати збережені процедури. Для запуску процедури, що зберігається, використовується SQL вираз CALL
Параметри
Збережені процедури можуть мати параметри IN
INOUT
иOUT
Залежно від версії MySQL. Інтерфейс mysqli не робить різниці між цими типами параметрів.
Параметр IN
Вхідні параметри вказуються усередині пропозиції CALL
. При передачі вхідних параметрів важливо переконатись, що їх значення коректно екрановані.
Приклад #1 Виклик збереженої процедури
Loading...
Результат виконання наведеного прикладу:
array(1) {
["id"]=>
string(1) "1"
}
Параметр INOUT/OUT
Значения параметровINOUT
OUT
доступні через змінні сесії.
Приклад #2 Використання змінних сесії
Loading...
Результат виконання наведеного прикладу:
Hi!
Розробники додатків та фреймворків можуть надати більш зручний API, в якому поряд із сесійними змінними використовується перегляд каталогів бази даних безпосередньо. Проте варто враховувати, що такий підхід знижує швидкодію.
Обробка результуючих наборів
Збережені процедури можуть повертати результуючі набори рядків. Таблиці результатів роботи процедури, що зберігається, не можна коректно витягти засобами mysqli::query()Функцияmysqli::query() виконує дві операції: запускає запит і отримує перший результуючий набір, поміщаючи його в буфер. Збережені процедури можуть повертати більше одного результуючого набору, але при використанні mysqli::query() всі вони, крім першого, стануть недоступними для користувача.
Результуючі таблиці процедур, що зберігаються, витягуються функціями mysqli::real_query() або mysqli::multi_query(). Обидві функції дозволяють отримати будь-яку кількість результуючих наборів, повернутих SQL-запитами, таких як CALL
. Якщо в процесі роботи не вдається отримати всі доступні результати виклику процедури, що зберігається, буде викликатися помилка.
Приклад #3 Вилучення результатів роботи процедури, що зберігається.
Loading...
Результат виконання наведеного прикладу:
---
array(3) {
[0]=>
array(1) {
[0]=>
string(1) "1"
}
[1]=>
array(1) {
[0]=>
string(1) "2"
}
[2]=>
array(1) {
[0]=>
string(1) "3"
}
}
---
array(3) {
[0]=>
array(1) {
[0]=>
string(1) "2"
}
[1]=>
array(1) {
[0]=>
string(1) "3"
}
[2]=>
array(1) {
[0]=>
string(1) "4"
}
}
Використання запитів, що готуються.
Спеціальних засобів для вилучення даних при використанні запитів, що готуються, не потрібно. Інтерфейси підготовлюваних та звичайних запитів однакові. Однак, потрібно враховувати, що не всі версії MySQL підтримують підготовку в запиті SQL-виразу CALL
Приклад #4 Збережені процедури та запити, що готуються.
Loading...
Результат виконання наведеного прикладу:
---
array(3) {
[0]=>
array(1) {
[0]=>
int(1)
}
[1]=>
array(1) {
[0]=>
int(2)
}
[2]=>
array(1) {
[0]=>
int(3)
}
}
---
array(3) {
[0]=>
array(1) {
[0]=>
int(2)
}
[1]=>
array(1) {
[0]=>
int(3)
}
[2]=>
array(1) {
[0]=>
int(4)
}
}
Зрозуміло, підтримується прив'язка результатів до об'єкта запиту.
Приклад #5 Збережені процедури та запити, що готуються, з використанням прив'язки результатів
Loading...
Результат виконання наведеного прикладу:
id = 1
id = 2
id = 3
id = 2
id = 3
id = 4
Дивіться також