我正在尝试使用MySQL和MariaDB创建一个名为Order的表。 我已经删除了除表ID之外的所有内容。 如果我将表名更改为类似Test的名称,则可以使用,但是将表创建为Order,“ Order”或“ Order”不起作用。 SQL: 错误信息: 但这有效: ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在努力使下面的触发器与我的数据库一起编译。 现在,其MariaDB v5.5.56。 我已经在在线验证器中尝试了这种语法,结果如下:
SQLFiddle:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
https://www.eversql.com/sql-syntax-check-validator/
Great work, the query's syntax is valid!
https://rextester.com/l/mysql_online_compiler
Compiles with no errors
在我的环境中,我得到:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4.
我的错误似乎与SQLFiddle错误匹配...但是其他解析器工作正常也很奇怪。 基于数据库版本的语法可能有问题吗?
这是我要执行的操作:
CREATE TRIGGER insert_pad
BEFORE INSERT on vehicles FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE localid CHAR(17);
DECLARE veh_mod CHAR(17);
DECLARE cur1 CURSOR FOR select id, RPAD(vin, 17,'Q') from vehicles where length(rtrim(vin)) < 17;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO localid, veh_mod;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE vehicles SET vin = veh_mod WHERE id = localid;
END LOOP;
CLOSE cur1;
END;
如果有人有任何想法,我很想听听他们的意见! 再次感谢!
我没有看到定界符的变化。 否则,第4行的分号将终止该语句,这将引发错误。
DELIMITER
语句更改语句定界符。 我们想要将其更改为一些我们想要执行的语句中未出现的字符串。 在此示例中,我们将分隔符更改为两个美元符号,然后将其更改回默认的分号。
DELIMITER $$
CREATE TRIGGER insert_pad
BEFORE INSERT on vehicles FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE localid CHAR(17);
...
END$$
DELIMITER ;
另一个想法:我认为触发器不允许针对导致触发器被触发的语句中引用的表发出DML(插入/更新/删除)。
但是在INSERT触发器之前,我们被允许引用和修改将要插入的行的列的值。 我们使用特殊的限定词NEW.
引用要插入的行中的列。 例如:
DELIMITER $$
CREATE TRIGGER insert_pad
BEFORE INSERT ON vehicles FOR EACH ROW
BEGIN
-- if vin less than 17 characters, pad with Q
IF( CHAR_LENGTH(TRIM( NEW.vin )) < 17 ) THEN
SET NEW.vin = RPAD(TRIM( NEW.vin ), 17,'Q');
END IF;
END$$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.