2015-01-14 94 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