【发布时间】:2015-11-03 18:07:55
【问题描述】:
我想设置一个触发器,这样如果在更新时“SyncStatus”= 1,那么触发器将更新“SyncStatusTimestamp”= Current_Time_Stamp。
但我收到一条错误消息:
错误:
无法更新存储函数/触发器中的表“血压电池” 因为它已被调用此存储的语句使用 函数/触发器
----------- 表详细信息 -------------
CREATE TABLE `bloodpressurebattery` (
`BloodPressureBatteryID` INT(11) NOT NULL AUTO_INCREMENT,
`ByDevSessionId` INT(11) NOT NULL,
`ByPatientId` INT(11) NULL DEFAULT NULL,
`ByDeviceId` INT(11) NULL DEFAULT NULL,
`Value` FLOAT NULL DEFAULT NULL,
`SequenceId` INT(11) NULL DEFAULT NULL,
`SyncStatus` INT(11) NULL DEFAULT '0',
`Timestamp` TIMESTAMP(3) NULL DEFAULT NULL,
`WrittenToAndroidDatabaseTimestamp` TIMESTAMP(3) NULL DEFAULT NULL,
`WrittenToServerDatabaseTimestamp6` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`SyncStatusTimestamp` TIMESTAMP(3) NULL DEFAULT '1970-01-01 00:00:01.000',
PRIMARY KEY (`BloodPressureBatteryID`),
INDEX `ByDevSessionId` (`ByDevSessionId`),
CONSTRAINT `bloodpressurebattery_ibfk_1` FOREIGN KEY (`ByDevSessionId`) REFERENCES `devicesession` (`DeviceSessionID`) ON UPDATE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=524874
;
---- 触发器详细信息 ----------
DELIMITER //
CREATE TRIGGER SyncStatusTimestamp_bloodpressurebattery_after_update
AFTER UPDATE
ON bloodpressurebattery FOR EACH ROW
BEGIN
DECLARE _SyncStatusTimestamp INT ;
DECLARE _BloodPressureBatteryID INT ;
SET _BloodPressureBatteryID = (SELECT bloodpressurebattery.BloodPressureBatteryID As _BloodPressureBatteryID
FROM bloodpressurebattery
WHERE BloodPressureBatteryID = new.BloodPressureBatteryID AND SyncStatus = 1);
IF _BloodPressureBatteryID > 0 THEN
UPDATE bloodpressurebattery SET SyncStatusTimestamp = CURRENT_TIMESTAMP AND bloodpressurebattery.BloodPressureBatteryID = _BloodPressureBatteryID ;
END IF ;
END
【问题讨论】: