GOTO
Оператор GOTO
Оператор goto дозволяє здійснювати безумовний перехід і має наступний синтаксис:
GOTO label;
Оператор goto здійснює перехід до оператора, позначеного міткою label. Це може бути як оператор begin, так і будь-який з циклів: while, repeat та loop. Крім того, мітка може бути не прив'язана ні до одного з операторів процедури, а оголошена за допомогою оператора label, який має наступний синтаксис:
LABEL label;
У загальному випадку використання операторів goto і label може виглядати так, як це представлено у прикладі.
Приклад:
CREATE PROCEDURE binrand ()
BEGIN
LABEL labelname;
...
GOTO labelname;
END
Оператор LABEL не виконує ніяких дій - завдання цього оператора просто оголосити мітку labelname. На місці цього оператора можна помістити будь-який оператор, що допускає використання в своєму складі мітки (BEGIN, WHILE, REPEAT та LOOP). Досягаючи оператора GOTO, процедура слідує до посилання і переходить назад до мітки labelname. Таким чином, у прикладі реалізований безкінечний цикл. Зазвичай перехід по мітці GOTO використовують спільно з оператором IF, так як це продемонстровано в наступному прикладі, де представлена ??реалізація процедури binrand () з використанням оператора безумовного переходу GOTO.
Приклад:
CREATE PROCEDURE binrand ()
LANGUAGE SQL
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE bin TINYTEXT DEFAULT ’’;
LABEL wet;
SET i = i + 1;
IF RAND() >0.5 THEN SET bin = CONCAT(bin, '1');
ELSE SET bin = CONCAT(bin, '0');
END IF;
IF(i < 20) THEN GOTO wet;
END IF;
SELECT bin;
END //
CALL binrand () //
bin
00001010001110111100
Однак використовувати оператор GOTO для реалізації циклів не рекомендується, тому що звичайні цикли набагато наочніше і простіше піддаються модифікації, до того ж у них складніше допустити логічну помилку.
Часто взагалі рекомендується не використовувати оператор GOTO, оскільки він підштовхує до створення погано структурованого коду. Це не виключає можливості створення читабельного та структурованого коду з використанням оператора GOTO, але спокуса неправильної реалізації цього оператора занадто велика. Крім того, будь-який код можна переписати без використання GOTO, деякі сучасні мови програмування (наприклад, РНР), взагалі не включають його у свій склад.