मैं अनुमान लगा रहा हूँ कि इसका आपके चरों को निर्दिष्ट करने के तरीके से कुछ लेना-देना हो सकता है।
मेरी सलाह है कि अपनी प्रक्रिया के अंदर स्थानीय चर घोषित करें, और उन्हें SELECT...INTO
. का उपयोग करके असाइन करें . यह सामान्य रूप से एक अच्छा अभ्यास है, और आपकी समस्या में आपकी सहायता कर सकता है।
आपकी प्रक्रिया इस प्रकार दिखाई देगी:
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 ;