【发布时间】:2019-07-08 10:43:12
【问题描述】:
我有以下可在 phpMyAdmin 中使用的查询
SELECT CONCAT("'",GROUP_CONCAT( fence_id SEPARATOR "','" ),"'") AS fence_ids
FROM asset_fence af
INNER JOIN assets a ON a.vehicle_id = af.vehicle_id
WHERE a.client_id=1
但是同样的查询在存储过程中给了我错误
错误是:
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 8 行的 '@fence_ids = SELECT CONCAT("'",GROUP_CONCAT(fence_id SEPARATOR "','" ),"'") AS ' 附近使用正确的语法
存储过程是
DELIMITER $$
CREATE PROCEDURE `prcDeleteClient`(IN `f_client_id` INT, OUT AROWS INT)
BEGIN
START TRANSACTION;
@fence_ids = SELECT CONCAT("'",GROUP_CONCAT( fence_id SEPARATOR "','" ),"'") AS fence_ids FROM asset_fence af INNER JOIN assets a ON a.vehicle_id = af.vehicle_id WHERE a.client_id=f_client_id
DELETE
asset_fence,
geo_fence
FROM
geo_fence gf INNER JOIN asset_fence af ON gf.fence_id = af.fence_id
WHERE
af.fence_id IN (@fence_ids)
DELETE
client,
assets,
asset_movement
FROM
asset_movement am INNER JOIN assets a ON am.vehicle_id = a.vehicle_id
assets a INNER JOIN client c ON a.client_id = c.client_id
WHERE
c.client_id=f_client_id
SET @AROWS = ROW_COUNT();
SELECT @AROWS as AROWS;
COMMIT;
END $$
DELIMITER ;
更新程序是
DELIMITER $$
CREATE PROCEDURE `prcDeleteClient`(IN `f_client_id` INT, OUT AROWS INT)
BEGIN
START TRANSACTION;
DELETE
af,
gf
FROM
geo_fence gf
INNER JOIN asset_fence af ON gf.fence_id = af.fence_id
INNER JOIN assets a ON a.vehicle_id = af.vehicle_id
WHERE
a.client_id=f_client_id;
DELETE
c,
a,
am
FROM
asset_movement am INNER JOIN assets a ON am.vehicle_id = a.vehicle_id
assets a INNER JOIN clients c ON a.client_id = c.client_id
WHERE
c.client_id=f_client_id;
SELECT ROW_COUNT() AS AROWS;
COMMIT;
END $$
DELIMITER ;
错误是:MULTI DELETE 中的未知表 'c'
什么是错误,我该如何纠正?
最好的问候
【问题讨论】:
-
@juergen d:感谢您的 cmets....如何纠正这个问题?变量有什么问题?
-
你需要使用
SET来分配一个变量。SET @variable = value;
标签: mysql stored-procedures group-concat