mysql - 无法使我的存储过程在 MySQL 中工作
问题描述
我正在尝试创建一个存储过程,但它总是给我一个错误
我尝试更改分隔符中的符号,甚至删除分隔符,但似乎没有任何效果
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' at line 1”
解决方案
“DELIMITER”是客户端指令,而不是客户端传递给服务器的命令。此问题表明您看到的错误可能是由于使用无法识别“DELIMITER”的客户端引起的。
此外,MySQL 将显示的下一个语法错误是参数需要变量类型:
CREATE PROCEDURE 'check_values'(IN Autoridad VARCHAR, IN TipoVehiculo VARCHAR)
最后,您可能希望查看IF
语句中的逻辑。正如所写的那样,它们将永远是真实的,并且程序将永远如此SIGNAL SQLSTATE '45000'
。例如,如果 Autoridad == 'Fisalia' 则该术语Autoridad <> 'Transito'
将为 True,这意味着当与 'OR' 组合时,正如您所做的那样,整个谓词为真。通常,您似乎正在尝试的内容被编码为
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
推荐阅读
- python - python2支持结束后我可以拉python2包吗
- r - 使用 plotly / dygraphs 在闪亮中创建动态图形
- python - BayesianModel 的变量消除 inference.map_query 错误
- c# - .net core 3 按区域性更改控制器名称、操作名称和域名
- javascript - 我对 API 的调用没有更新 React 状态
- laravel - 在 laravel 中过滤 eloquent 模型
- php - PHP会话被视为局部变量
- routing - 将拥抱服务器中的参数作为 /foo/something 在双数函数中传递
- python - 如何禁用 plotly.express.line 中的趋势线?
- javascript - 鼠标悬停时的传单显示弹出窗口