Tôi đoán điều này có thể liên quan đến cách bạn chỉ định các biến của mình.
Lời khuyên của tôi là khai báo các biến cục bộ bên trong thủ tục của bạn và gán chúng bằng cách sử dụng SELECT...INTO
. Nói chung, đây là một phương pháp hay và có thể giúp bạn giải quyết vấn đề của mình.
Đây là quy trình của bạn sẽ trông như thế nào:
DELIMITER $$
DROP PROCEDURE IF EXISTS deleteOrg $$
CREATE PROCEDURE deleteOrg(IN IN_ID INT)
MODIFIES SQL DATA
BEGIN
DECLARE V_ORG_ID INT;
DECLARE V_MY_LEFT INT;
DECLARE V_MY_RIGHT INT;
DECLARE V_MY_WIDTH INT;
START TRANSACTION;
SELECT id,
lft,
rgt,
rgt - lft + 1
into V_ORG_ID,
V_MY_LEFT,
V_MY_RIGHT,
V_MY_WIDTH
FROM organization
WHERE id = IN_ID;
-- delete statements for removing roles and other dependencies
DELETE FROM organization
WHERE id = V_ORG_ID;
UPDATE organization
SET rgt = rgt - V_MY_WIDTH
WHERE rgt > V_MY_RIGHT;
UPDATE organization
SET lft = lft - V_MY_WIDTH
WHERE lft > V_MY_LEFT;
COMMIT;
END;
$$
DELIMITER ;