2016-08-22 90 views
0

我有一個有趣的問題,有人可以幫助我。我有一個大多數整數的表格/表格,偶爾會用一批新數字更新。觸發器將所有舊號碼傳遞給設計完全相同的第二個表格,因爲舊數字對於保持一段時間非常重要。觸發看起來是這樣的:根據提交後的時間戳在時間間隔內禁用觸發

begin

if NEW.(rowname)<>OLD.(rowname) then 
update table2 
set table2.rowname = OLD.rowname 
where table2.id = OLD.ID; 
end if; 
... 
end 

這段代碼適用於整數類型的這些行的100+。 現在被委託手動插入新號碼的人很容易犯錯誤,並且回到更新表格以改變他們的錯誤將不可避免地將錯誤的數字傳遞給第二個表格(實際上有5個表格保持5代數字)。所以我認爲可能有辦法在表格中包含一個時間戳字段,並使用包含時間戳的初始「IF/THEN」語句在SUBMIT之後創建一個時間間隔來禁用觸發器,以便無需更正觸發器實際觸發。這可能嗎?

+1

不,不可能延遲觸發激活。您需要重新設計流程,並使用戶能夠回滾更改或允許他們指出更改是一種更正,從而更新最新的日誌條目而不是插入新的日誌條目。 – Shadow

+0

我想這可能意味着創建一個間隔表,他們可以實際看到他們的數字(這些數字實際上是我設計的AMchart的繪圖點)。當他們看到圖表時,他們可以更好地瞭解他們打出的數字,這實際上可以起作用。感謝您的提示。 – user3241848

+0

可以將這個與觸發器和事件一起工作來綜合。我寫了一個有點類似的答案[這裏](http://stackoverflow.com/a/39041181) – Drew

回答

0

我會用好奇心@drew來看看它,但是我的結論/解決方案將涉及觸發器定義中語義的輕微改變。這些行是4位數的臨時數,觸發器將被簡單地定義爲所有新讀數與舊數據不同時舊數據將傳遞到下一個表,等等。 「IF」和「END IF」語句將包含引用所有行的所有語句。因此,如果舊行數字是2500,則新數據將被簡單地輸入爲2501,並且輕微偏移量通過採用溫度讀數的儀器落入誤差範圍內。通過這種方式,可以在主表上進行任何更改,除非它是完整更改,而不會影響存檔表。這是一種實用而不雅的解決方案,因爲它忽略了SQL語言的複雜性和鑑賞力,這在我不熟悉的時候開始。 我很幸運,因爲這裏允許出現誤差。由於雙方您的輸入...

新觸發器:

begin 
if 
NEW.row1<>OLD.row1 then 
update table2 
set table2.row1 = OLD.row1 
where table.id = OLD.ID; 
and 
(if?) NEW.row2<>OLD.row2 then 
update table2 
set table2.row2 = OLD.row2 
where table2.id = OLD.ID; 
..... 
end if; 
end 

我希望語義答案的作品,如果沒有,我會弄清楚的細節,直到它does..but你這個想法。

+0

最終模板:開始 如果NEW.row1 OLD.row1和 NEW.row2 OLD.row2 然後更新表2 set table2.row1 = OLD.row1, table.row2 = OLD.row2 其中table.id = OLD.ID; end if; 結束 – user3241848