声明变量时出现mysql错误
这是一个巨大的查询..在执行以下过程时,它显示声明变量时出现mysql错误,mysql,Mysql,这是一个巨大的查询..在执行以下过程时,它显示 DELIMITER $$ BEGIN DECLARE i integer $$ DROP TEMPORARY TABLE IF EXISTS tmp_tags; CREATE TEMPORARY TABLE tmp_tags ( `id` int(11) NOT NULL AUTO_INCREMENT, `org_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `tag_id` varc
DELIMITER $$
BEGIN
DECLARE i integer $$
DROP TEMPORARY TABLE IF EXISTS tmp_tags;
CREATE TEMPORARY TABLE tmp_tags (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`tag_id` varchar(150) NOT NULL,PRIMARY KEY (`id`)
);
SET i = 1;
REPEAT
INSERT INTO tmp_tags ( org_id, user_id, tag_id)
SELECT org_id,user_id ,strSplit(tag_id, ',', i) FROM tagging
WHERE strSplit(tag_id, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
DROP TEMPORARY TABLE IF EXISTS tmp_tagged_org;
IF userId IS NULL THEN
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames, CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute;'><i class='fa fa-warning' style='color:red'></i></label> ', '')) as calldate, IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style=' width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id ;
ELSE
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames,CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute'><i class='fa fa-warning' style='color:red'></i></label>', ' ')) as calldate,IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style='width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id AND organization.user_id = userId
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id;
END IF;
END $$
DELIMITER;
1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第2行“DECLARE i integer”附近
DELIMITER $$
BEGIN
DECLARE i integer $$
DROP TEMPORARY TABLE IF EXISTS tmp_tags;
CREATE TEMPORARY TABLE tmp_tags (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`tag_id` varchar(150) NOT NULL,PRIMARY KEY (`id`)
);
SET i = 1;
REPEAT
INSERT INTO tmp_tags ( org_id, user_id, tag_id)
SELECT org_id,user_id ,strSplit(tag_id, ',', i) FROM tagging
WHERE strSplit(tag_id, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
DROP TEMPORARY TABLE IF EXISTS tmp_tagged_org;
IF userId IS NULL THEN
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames, CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute;'><i class='fa fa-warning' style='color:red'></i></label> ', '')) as calldate, IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style=' width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id ;
ELSE
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames,CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute'><i class='fa fa-warning' style='color:red'></i></label>', ' ')) as calldate,IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style='width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id AND organization.user_id = userId
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id;
END IF;
END $$
DELIMITER;
我的问题出了什么错
DELIMITER $$
BEGIN
DECLARE i integer $$
DROP TEMPORARY TABLE IF EXISTS tmp_tags;
CREATE TEMPORARY TABLE tmp_tags (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`tag_id` varchar(150) NOT NULL,PRIMARY KEY (`id`)
);
SET i = 1;
REPEAT
INSERT INTO tmp_tags ( org_id, user_id, tag_id)
SELECT org_id,user_id ,strSplit(tag_id, ',', i) FROM tagging
WHERE strSplit(tag_id, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
DROP TEMPORARY TABLE IF EXISTS tmp_tagged_org;
IF userId IS NULL THEN
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames, CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute;'><i class='fa fa-warning' style='color:red'></i></label> ', '')) as calldate, IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style=' width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id ;
ELSE
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames,CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute'><i class='fa fa-warning' style='color:red'></i></label>', ' ')) as calldate,IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style='width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id AND organization.user_id = userId
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id;
END IF;
END $$
DELIMITER;
$$是用于关闭存储过程定义的分隔符,因此它不应紧跟在声明之后,即在过程本身内。该声明仍应使用 前几行应如下所示-
DELIMITER $$
BEGIN
DECLARE i integer $$
DROP TEMPORARY TABLE IF EXISTS tmp_tags;
CREATE TEMPORARY TABLE tmp_tags (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`tag_id` varchar(150) NOT NULL,PRIMARY KEY (`id`)
);
SET i = 1;
REPEAT
INSERT INTO tmp_tags ( org_id, user_id, tag_id)
SELECT org_id,user_id ,strSplit(tag_id, ',', i) FROM tagging
WHERE strSplit(tag_id, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
DROP TEMPORARY TABLE IF EXISTS tmp_tagged_org;
IF userId IS NULL THEN
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames, CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute;'><i class='fa fa-warning' style='color:red'></i></label> ', '')) as calldate, IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style=' width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id ;
ELSE
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames,CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute'><i class='fa fa-warning' style='color:red'></i></label>', ' ')) as calldate,IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style='width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id AND organization.user_id = userId
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id;
END IF;
END $$
DELIMITER;
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_name`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_name`()
BEGIN
DECLARE i integer
更改声明语句
DELIMITER $$
BEGIN
DECLARE i integer $$
DROP TEMPORARY TABLE IF EXISTS tmp_tags;
CREATE TEMPORARY TABLE tmp_tags (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`tag_id` varchar(150) NOT NULL,PRIMARY KEY (`id`)
);
SET i = 1;
REPEAT
INSERT INTO tmp_tags ( org_id, user_id, tag_id)
SELECT org_id,user_id ,strSplit(tag_id, ',', i) FROM tagging
WHERE strSplit(tag_id, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
DROP TEMPORARY TABLE IF EXISTS tmp_tagged_org;
IF userId IS NULL THEN
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames, CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute;'><i class='fa fa-warning' style='color:red'></i></label> ', '')) as calldate, IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style=' width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id ;
ELSE
CREATE TEMPORARY TABLE tmp_tagged_org AS
SELECT GROUP_CONCAT( organization_tag.tag_name
SEPARATOR ', ' ) AS tags,tmp_tags.org_id AS tagged_org_id
FROM organization_tag
INNER JOIN tmp_tags ON organization_tag.id = tmp_tags.tag_id
GROUP BY tmp_tags.org_id;
SELECT calllist.id AS DT_RowId,tagging.tag_id, tmp_tagged_org.tags AS display_tag, organization.name, (
SELECT GROUP_CONCAT( CONCAT( CONCAT( contacts.first_name, ' ', contacts.last_name ), ':', contacts.phone )
SEPARATOR '<br> ' )
FROM contacts
WHERE organization.id = org_id
) AS
unames,CONCAT(calllist.call_back_date,' ' , if(calllist.call_back_date < now(), '<label style='position:absolute'><i class='fa fa-warning' style='color:red'></i></label>', ' ')) as calldate,IF(tmp_tagged_org.tags IS NULL,'<input type='hidden' class='servicetags' style='width:150px'>',CONCAT('<input type='hidden' class='servicetags' value='',tmp_tagged_org.tags,'' style=' width:150px' >')) as tag_name
FROM calllist
INNER JOIN organization ON organization.id = calllist.org_id AND organization.user_id = userId
LEFT JOIN tmp_tagged_org ON tmp_tagged_org.tagged_org_id = calllist.org_id
LEFT JOIN tagging ON calllist.org_id = tagging.org_id
LEFT JOIN contacts ON organization.id = contacts.org_id
GROUP BY contacts.org_id order by calllist.id;
END IF;
END $$
DELIMITER;
DECLARE i integer;
将DECLARE i integer$$更改为DECLARE i integer;1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第2行@Vipin Jain的“DECLARE i integer”附近使用的正确语法。但是我在使用declare i int;@amdixon,@Puyamaybe这对你有帮助是的。对但是我在使用declare i int时遇到了同样的错误@帕斯迪布洛特汉克斯。但当修改为您的代码时,它会显示错误处理您的请求时发生了一个或多个错误:@Zafar Malik