Не могу заставить мою хранимую процедуру работать в MySQL - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать хранимую процедуру, но она всегда выдает ошибку

Я пытался изменить символы в разделителе, даже удалить разделитель, но, похоже, ничего не работает

DELIMITER //
CREATE PROCEDURE`check_values`(IN Autoridad, IN TipoVehiculo)
BEGIN
    IF((Autoridad <> 'Transito') OR (Autoridad <> 'Fiscalia')  OR (Autoridad <> 'Pol_Car') OR (Autoridad <> 'Juzgado')) THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Autoridad no valida';
    END IF;
    IF((TipoVehiculo <> 'Automovil') OR (TipoVehiculo <> 'Bicicleta') OR (TipoVehiculo <> 'Bus') OR (TipoVehiculo <> 'Buseta') OR (TipoVehiculo <> 'Camion') OR (TipoVehiculo <> 'Camioneta') OR (TipoVehiculo <> 'Ciclomotor') OR (TipoVehiculo <> 'Furgoneta')OR (TipoVehiculo <> 'Moto') OR (TipoVehiculo <> 'Motocarro') OR (TipoVehiculo <> 'Motocultor') OR (TipoVehiculo <> 'Tractocamion') OR (TipoVehiculo <> 'Tractocarro') OR (TipoVehiculo <> 'Trolebus') OR (TipoVehiculo <> 'Volqueta')) THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Tipo de vehiculo no valido';
    END IF;  
END;//
DELIMITER;

Возвращает ошибку в строке 1: «У вас есть ошибка в синтаксисе SQL; похоже, ошибка примерно такая:« DELIMITER / / CREATE PROCEDURE check_values (IN Autoridad, IN TipoVehiculo) BEG »в строке 1»

1 Ответ

0 голосов
/ 18 июня 2019

«DELIMITER» - это директива клиента, а не команда, которую клиент передает серверу. Этот вопрос указывает, что ошибка, которую вы видите, может быть вызвана использованием клиента, который не распознает «DELIMITER».

Кроме того, следующая синтаксическая ошибка MySQL покажет, что аргументам необходим тип переменной:

CREATE PROCEDURE 'check_values'(IN Autoridad VARCHAR, IN TipoVehiculo VARCHAR)

Наконец, вы можете пересмотреть логику в ваших IF утверждениях. Как написано, они всегда будут верны, и процедура всегда будет SIGNAL SQLSTATE '45000'. Например, если Autoridad == 'Fiscalia', тогда термин Autoridad <> 'Transito' будет истинным, что означает, что в сочетании с 'ИЛИ', как и вы, весь предикат является истинным. Обычно то, что вы пытаетесь сделать, закодировано как

IF((Autoridad <> 'Transito') AND (Autoridad <> 'Fiscalia') AND (Autoridad <> 'Pol_Car') AND (Autoridad <> 'Juzgado')) THEN

или равно эффективный

IF NOT ((Autoridad == 'Transito') OR (Autoridad = 'Fiscalia')  OR (Autoridad == 'Pol_Car') OR (Autoridad == 'Juzgado')) THEN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...