我有以下存儲過程我的SQL語法不能在存儲過程中比較本地vairaiable工作
DELIMITER $$
USE `mydb$$
DROP PROCEDURE IF EXISTS `add_master_profile_data_temp`$$
CREATE PROCEDURE `add_master_profile_data_temp`(
IN _msisdn VARCHAR (50),
IN _device_identifier TEXT
)
BEGIN
DECLARE lv_IDMsisdn BIGINT DEFAULT NULL;
DECLARE lv_IDDevice BIGINT DEFAULT NULL ;
SET @lv_IDMsisdn := (SELECT id FROM `master_profile` WHERE `msisdn` = _msisdn) ;
SET @lv_IDDevice := (SELECT id FROM `master_profile` WHERE device_identifier =_device_identifier AND `msisdn` <> _msisdn AND `master_profile_status` = 1) ;
IF (@lv_IDDevice <> @lv_IDMsisdn) THEN
SELECT @lv_IDDevice ,@lv_IDMsisdn ,2 ;
ELSE
SELECT @lv_IDDevice ,@lv_IDMsisdn ,1;
END IF;
END$$
DELIMITER ;
問題是語法@lv_IDDevice <> @lv_IDMsisdn它總是即將來臨結果我是假 而得到
@lv_IDDevice @lv_IDMsisdn 1
62(NULL)1
EDIT
我甚至試過
CREATE PROCEDURE `add_master_profile_data_temp`(
IN _msisdn VARCHAR (50),
IN _device_identifier TEXT
)
BEGIN
DECLARE lv_IDMsisdn BIGINT;
DECLARE lv_IDDevice BIGINT ;
#SET @lv_IDMsisdn := (SELECT id FROM `master_profile` WHERE `msisdn` = _msisdn) ;
#SET @lv_IDDevice := (SELECT id FROM `master_profile` WHERE device_identifier =_device_identifier AND `msisdn` <> _msisdn AND `master_profile_status` = 1) ;
SELECT id INTO lv_IDMsisdn FROM `master_profile` WHERE `msisdn` = _msisdn ;
SELECT id INTO lv_IDDevice FROM `master_profile` WHERE device_identifier =_device_identifier AND `msisdn` <> _msisdn AND `master_profile_status` = 1 ;
IF (lv_IDDevice IS NOT NULL AND lv_IDDevice <> lv_IDMsisdn) THEN
SELECT lv_IDDevice ,lv_IDMsisdn ,2 ;
ELSE
SELECT lv_IDDevice ,lv_IDMsisdn ,1;
END IF;
END$$
DELIMITER ;
'@ lv_IDDevice'和'@ lv_IDMsisdn'是[9.4用戶定義的變量(https://dev.mysql.com/doc/refman/5.7/en/user -variables.html)。 'lv_IDDevice'和'lv_IDMsisdn'是[13.6.4.1局部變量DECLARE語法](https://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html),是不同的變量。 – wchiquito
我需要一個局部變量。我需要在Synstax中糾正什麼問題 –
我無法重現問題。請參閱[db-fiddle](https://www.db-fiddle.com/f/fHgvtrxVqsTgmy6oWCGb1k/0)。 – wchiquito