我有一個表是這樣的:如何分析,發生了什麼,而更新行
| id | address | name | oid | state | event_id | ctrl |
-------------------------------------------------------------------
| 1 | test_addr_1 | test_1 | 25.345.17 | 1 | 0 | 15 |
我需要得到事項標識行,同時更新數據。
我想要做這樣的事情:
如果新的名稱不能與舊名稱等於event_id = event_id + 1
如果新的OID不可用舊OID event_id = event_id + 2
如果新狀態不與舊的狀態等於等於event_id = event_id + 4
如果新CTRL更大然後老CTRL event_id = event_id + 8
# Params to procedure
PROCEDURE Write(IN pAddr VARCHAR(20), IN pName VARCHAR(20), IN pOid VARCHAR(20), IN pState TINYINT, IN pCtrl INT)
#procedure body
SET @ev = 0;
SELECT
CASE
WHEN name != pName THEN SET @ev = @ev + 1
WHEN oid != pOid THEN SET @ev = @ev + 2
WHEN state != pState THEN SET @ev = @ev + 4
WHEN ctrl > pCtrl THEN SET @ev = @ev + 8
END
FROM table1
UPDATE table1 SET ..... , event_id = @ev WHERE address = pAddr
我該怎麼辦呢?或者,最好不要藉助SQL?
這聽起來好像觸發更新後會是更好的選擇在這裏。順便說一句,你能確定你的多個條件不會同時發生嗎? –