2015-01-14 97 views
1

@http://www.mediafire.com/download/5h674s7wdzk8tek/m4_2013.db 我對上述數據庫使用sqlitestudiov3.01。問題是,它不會讓編輯數據值&啓動錯誤SQL觸發器遞歸級別過高

An error occurred while commiting the data: too many levels of trigger recursion 

,如果我把我的觸發這個錯誤得到解決。我triiger如下

CREATE TRIGGER MACRO_A 
     AFTER UPDATE ON ELZ_A 
     FOR EACH ROW 
BEGIN 
    UPDATE ELZ_A 
     SET CURRENT_DENSITY = ROUND((LOAD/2.721) , 2); 

    UPDATE ELZ_A 
     SET VOLTS_AVG = ROUND((VOLTS_T/ELEMENTS) , 2); 

    UPDATE ELZ_A 
     SET VOLTS_STNDR = ROUND(2.4 +((12.75/2.721) *((VOLTS_AVG - 2.4)/CURRENT_DENSITY) ) -((90 - CATHOLYTE_TEMP) * 0.01) +((32 - CATHOLYTE_CONC) * 0.02) , 2); 

    UPDATE ELZ_A 
     SET KF_FACTOR = ROUND(((VOLTS_AVG -(90 - CATHOLYTE_TEMP) * 0.016 *((LOAD/2.721)/5) ) +((32 - CATHOLYTE_CONC) * 0.033 *((LOAD/2.721)/5) - 2.4) ) /(LOAD/2.721) , 3); 

    UPDATE ELZ_A 
     SET PRODUCTION = ROUND(0.001492 * 24 * ELEMENTS * LOAD *(EFFICIENCY/100) , 2); 

    UPDATE ELZ_A 
     SET TEMP_CORRELATION = ROUND(7 *(CURRENT_DENSITY/3) *(90 - CATHOLYTE_TEMP) , 2); 

    UPDATE ELZ_A 
     SET CONC_CORRELATION = ROUND(14 *(CURRENT_DENSITY/3) *(32 - CATHOLYTE_CONC) , 2); 

    UPDATE ELZ_A 
     SET DC_POWER_PER_TON = ROUND(((24 * LOAD * VOLTS_T)/PRODUCTION) - TEMP_CORRELATION - CONC_CORRELATION, 0); 
END; 

好吧,我不知道,如果遵循上述標準,但ATLEAST在它的作品完美一些應用&模擬了Excel公式計算。任何有想法的人

回答

2

任何列被更新時,此觸發器會觸發,因此它也會觸發自身更新的列。

如果你有「輸入」和「輸出」欄,其中只有後者被觸發計算之間的區別,你可以限制觸發器觸發僅在輸入列:

CREATE TRIGGER ... 
AFTER UPDATE OF LOAD, VOLTS_T, ELEMENTS, ... ON ... 

然而,將派生值存儲在數據庫中是一個壞主意。 更好地使用視圖來計算對飛派生值:

CREATE VIEW ELZ_with_all_values AS 
SELECT LOAD, 
     VOLTS_T, 
     ELEMENTS, 
     ... 
     LOAD/2.721 AS CURRENT_DENSITY, 
     VOLTS_T/ELEMENTS AS VOLTS_AVG, 
     ... 
FROM ELZ_A; 

請注意,你不應該使用ROUND()爲您用於進一步的計算值。 (在Excel中,格式只會影響數值的顯示方式)。

+0

在數據庫中''DATE,LOAD,VOLTS_T,ELEMENTS,CATHOLYTE_TEMP,CATHOLYTE_CONC,EFFICIENCY'是用戶輸入其餘的都是派生值... SQLitestudio給我創建視圖時出現錯誤http://www.mediafire.com/view/9i5cnrfq8pql0u6/Screenshot%20-%20140115%20-%20201726.png另外我試過觸發器的解決方案,但UPDATE otption在sqlitestudio中僅限於下拉列表元素http ://www.mediafire.com/view/7ednbbp897vb9kg/2015-01-14--1421249932_1440x900_scrot.png逗號缺失...我知道,但它只在預覽窗口中丟失。它在那裏 – nightcrawler

+0

謝謝我已經使用SQL編輯器計算出了它,許多thnx – nightcrawler