MySQL分隔符不工作
我尝试了一个教程,其中一个示例表与一些测试数据一起插入到存储过程中。但不幸的是,抛出了一条错误消息,表示分隔符有问题。整个剧本是:MySQL分隔符不工作,mysql,stored-procedures,delimiter,Mysql,Stored Procedures,Delimiter,我尝试了一个教程,其中一个示例表与一些测试数据一起插入到存储过程中。但不幸的是,抛出了一条错误消息,表示分隔符有问题。整个剧本是: CREATE TABLE filler ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE=Memory; CREATE TABLE t_hierarchy ( id INT NOT NULL PRIMARY KEY, parent INT NOT NULL, lft INT
CREATE TABLE filler (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
) ENGINE=Memory;
CREATE TABLE t_hierarchy (
id INT NOT NULL PRIMARY KEY,
parent INT NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL,
sets LineString NOT NULL,
data VARCHAR(100) NOT NULL,
stuffing VARCHAR(100) NOT NULL
) ENGINE=MyISAM;
DELIMITER $$
CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
DECLARE _cnt INT;
SET _cnt = 1;
WHILE _cnt <= cnt DO
INSERT
INTO filler
SELECT _cnt;
SET _cnt = _cnt + 1;
END WHILE;
END;
CREATE PROCEDURE prc_hierarchy(width INT)
main:BEGIN
DECLARE last INT;
DECLARE level INT;
SET last = 0;
SET level = 0;
WHILE width >= 1 DO
INSERT
INTO t_hierarchy
SELECT COALESCE(h.id, 0) * 5 + f.id,
COALESCE(h.id, 0),
COALESCE(h.lft, 0) + 1 + (f.id - 1) * width,
COALESCE(h.lft, 0) + f.id * width,
LineString(
Point(-1, COALESCE(h.lft, 0) + 1 + (f.id - 1) * width),
Point(1, COALESCE(h.lft, 0) + f.id * width)
),
CONCAT('Value ', COALESCE(h.id, 0) * 5 + f.id),
RPAD('', 100, '*')
FROM filler f
LEFT JOIN
t_hierarchy h
ON h.id >= last;
SET width = width / 5;
SET last = last + POWER(5, level);
SET level = level + 1;
END WHILE;
END
$$
DELIMITER ;
START TRANSACTION;
CALL prc_filler(5);
CALL prc_hierarchy(585937);
COMMIT;
CREATE INDEX ix_hierarchy_parent ON t_hierarchy (parent);
CREATE INDEX ix_hierarchy_lft ON t_hierarchy (lft);
CREATE INDEX ix_hierarchy_rgt ON t_hierarchy (rgt);
CREATE SPATIAL INDEX sx_hierarchy_sets ON t_hierarchy (sets);
在MySQL 5.0.51a-24+lenny2服务器上执行此操作会显示以下错误消息:
[Err]1310-结束标签$$不匹配
有人知道为什么会发生这种情况以及如何修复吗?我看到一些MySQL客户端不支持DELIMITER关键字并抛出错误。。。我相信这是你的情况。。。您应该尝试使用不同的客户端,如果可以的话,可能是与MySQL捆绑的CLI工具…?我看到一些MySQL客户端不支持分隔符关键字并抛出错误。。。我相信这是你的情况。。。您应该尝试使用不同的客户端,如果可以的话,可以使用与MySQL捆绑的CLI工具…?$$应该在每个创建的过程之后使用
CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
DECLARE _cnt INT;
SET _cnt = 1;
WHILE _cnt <= cnt DO
INSERT
INTO filler
SELECT _cnt;
SET _cnt = _cnt + 1;
END WHILE;
END$$ -- here's your problem
这就是为什么它被称为分隔符-它分隔SQL命令。你有“;”过程内部和过程外部的“$$”。$$应该在每个创建的过程之后
CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
DECLARE _cnt INT;
SET _cnt = 1;
WHILE _cnt <= cnt DO
INSERT
INTO filler
SELECT _cnt;
SET _cnt = _cnt + 1;
END WHILE;
END$$ -- here's your problem
这就是为什么它被称为分隔符-它分隔SQL命令。你有“;”程序内部和程序外部的“$$”。我正在使用支持它的Navicat,但还是要感谢提示。我正在使用支持它的Navicat,但还是要感谢提示。谢谢!我没看到这个。我根据你的帖子换了它,我不得不换一个结尾;以前也有一些行,现在可以了:-谢谢!我没看到这个。我根据你的帖子换了它,我不得不换一个结尾;使用END$$之前也有一些行,现在可以使用了:-