2016-10-10 81 views
1

我想要一個更新觸發器,當嘗試更新任何行>(max(IDBCRS_Testung)-100)時發生錯誤。只要我聲明一個號碼,觸發器本身就能正常工作,例如,mysql在觸發器中使用max

CREATE DEFINER=`root`@`%` TRIGGER `TEST`.`BCRS_BEFORE_UPDATE` BEFORE UPDATE ON `BCRS_Test` FOR EACH ROW 
BEGIN 
IF New.IDBCRS_Testung > (IDBCRS_Testung)-100) 
THEN 
SIGNAL SQLSTATE '45000' 
SET MESSAGE_TEXT = 'Update of record not allowed!'; 
END IF; 
END 

當然但是,這是不實際的,作爲標識數量在不斷增長,因此,我想:

CREATE DEFINER=`root`@`%` TRIGGER `TEST`.`BCRS_BEFORE_UPDATE` BEFORE UPDATE ON `BCRS_Test` FOR EACH ROW 
BEGIN 
IF New.IDBCRS_Testung > (Max(IDBCRS_Testung)-100) 
THEN 
SIGNAL SQLSTATE '45000' 
SET MESSAGE_TEXT = 'Update of record not allowed!'; 
END IF; 
END 

但後來我得到以下錯誤:

錯誤1111:1111:無效使用組功能

在Linux上使用最新的MySQL和工作臺Mint 17.3

TIA

回答

1

如果要從表中獲取任何值,則需要發出適當的select語句來獲取它。

所以,在觸發的身體(後開始)聲明一個變量(確保你使用正確的數據類型):

declare max_testung int; 

然後分配最大值給它:

SET max_testung = (SELECT max(IDBCRS_Testung) FROM BCRS_Test); 

然後使用變量做比較:

IF New.IDBCRS_Testung > (max_testung-100) 
+0

非常感謝!這正如我想要的那樣工作! – rickquan

+0

很高興能夠幫助:) – Shadow