2011-05-17 98 views
0
DELIMITER // 
    CREATE FUNCTION F_offshorePrice1(topsbwynum INTEGER, hulsbwynum INTEGER,sbwynum INTEGER, adjprice FLOAT(11,2), 
    price FLOAT(11,2), estprice FLOAT(11,2), pricehulint FLOAT(11,2), pricetopint FLOAT(11,2), pricehulcons FLOAT(11,2), 
    pricetop FLOAT(11,2),priceint FLOAT(11,2),pricetht FLOAT(11,2)) 
     RETURNS float(20,2) 
     NOT DETERMINISTIC 
     CONTAINS SQL 
     SQL SECURITY DEFINER 
    BEGIN 

    DECLARE FinalPrice VARCHAR(20); 
    DECLARE err VARCHAR(20); 

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err = 1; 



    IF(sbwynum > 0 AND hulsbwynum > 0 and sbwynum != hulsbwynum AND (topsbwynum = sbwynum OR topsbwynum < 1 or topsbwynum IS NULL)) THEN 
     IF (pricetopint > 0) THEN 
     SET FinalPrice = pricetopint; 
     ELSEIF(price > 0)THEN 
     SET FinalPrice = price - pricehulcons; 
     ELSEIF(estprice > 0)THEN 
     SET FinalPrice = estprice - pricehulcons; 
     END IF; 

    END IF; 



    IF(sbwynum > 0 AND topsbwynum > 0 and sbwynum != topsbwynum AND (hulsbwynum = sbwynum OR hulsbwynum < 1 or hulsbwynum IS NULL)) THEN 
    IF(pricehulint > 0)THEN 
     SET FinalPrice = pricehulint; 
    ELSEIF(price > 0)THEN 
     SET FinalPrice = price - pricetop; 
    ELSEIF(s.estprice > 0)THEN 
     SET FinalPrice = estprice - pricetop; 
    END IF; 

    END IF; 


    IF(sbwynum > 0 AND topsbwynum != hulsbwynum AND hulsbwynum != sbwynum AND topsbwynum != sbwynum AND topsbwynum > 0 and hulsbwynum > 0)THEN 
    IF(priceint > 0)THEN 
     SET FinalPrice = priceint; 
    ELSEIF(price > 0)THEN 
     SET FinalPrice = price - (pricetop + pricehulcons); 
    ELSEIF(estprice > 0)THEN 
     SET FinalPrice = estprice - (pricetop + pricehulcons); 
    END IF; 

    END IF; 


    IF(sbwynum > 0 AND topsbwynum = hulsbwynum AND sbwynum != hulsbwynum AND hulsbwynum > 0)THEN 
    IF(priceint > 0)THEN 
     SET FinalPrice = priceint; 
    ELSEIF(price > 0)THEN 
     SET FinalPrice = price - pricetht; 
    ELSEIF(estprice > 0)THEN 
     SET FinalPrice = estprice - pricetht; 
    END IF; 

    END IF; 


    IF(sbwynum > 0)THEN 
    IF(FinalPrice > 0)THEN 
     RETURN FinalPrice; 
    ELSEIF(adjprice > 0)THEN 
     RETURN adjprice; 
    ELSEIF(price > 0)THEN 
     RETURN price; 
    ELSEIF(estprice > 0)THEN 
     RETURN estprice; 
    ELSE 
     RETURN 0; 
    END IF; 
    ELSE 
     RETURN 0; 
    END IF; 


    END // 

    DELIMITER ; 

ERROR:=什么是错的这个MySQL功能

错误 似乎是在您的SQL查询的错误。下面的MySQL服务器的错误输出,如果有任何,也可以帮助你诊断问题

错误:未关闭的报价@ 16 STR: SQL: CREATE FUNCTION F_offshorePrice1(topsbwynum INTEGER,hulsbwynum INTEGER,sbwynum INTEGER,adjprice FLOAT(11, 2), 价格FLOAT(11,2),estprice FLOAT(11,2),pricehulint FLOAT(11,2),pricetopint FLOAT(11,2),pricehulcons FLOAT(11,2), pricetop FLOAT(11, 2),priceint FLOAT(11,2),pricetht FLOAT(11,2)) RETURNS浮动(20,2) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT“这个函数将用于海洋定价系统指MAIL ID:= 40516' BEGIN

DECLARE FinalPrice VARCHAR(20); DECLARE err VARCHAR(20);

为SQLEXCEPTION设置DECLARE CONTINUE HANDLER SET err = 1;

IF(sbwynum> 0 AND hulsbwynum> 0且sbwynum = hulsbwynum AND(topsbwynum = sbwynum OR topsbwynum < 1或topsbwynum IS NULL)!)THEN IF(pricetopint> 0)THEN SET = FinalPrice pricetopint; ELSEIF(price> 0)THEN SET FinalPrice = price - pricehulcons; ELSEIF(estprice> 0)THEN SET FinalPrice = estprice - pricehulcons; END IF;

END IF;

IF(sbwynum> 0 AND topsbwynum> 0且sbwynum = topsbwynum AND(hulsbwynum = sbwynum OR hulsbwynum < 1或hulsbwynum IS NULL)!)THEN IF(pricehulint> 0)THEN SET = FinalPrice pricehulint; ELSEIF(price> 0)THEN SET FinalPrice = price - pricetop; ELSEIF(s.estprice> 0)THEN SET FinalPrice = estprice - pricetop; END IF;

END IF;

IF(sbwynum> 0 AND topsbwynum = hulsbwynum AND hulsbwynum = sbwynum AND topsbwynum = sbwynum AND topsbwynum> 0且hulsbwynum> 0!!)THEN IF(priceint> 0)THEN SET = FinalPrice priceint; ELSEIF(price> 0)THEN SET FinalPrice = price - (pricetop + pricehulcons); (价格> 0) END IF;

END IF;

IF(sbwynum> 0 AND topsbwynum = hulsbwynum AND sbwynum!= hulsbwynum AND hulsbwynum> 0)THEN IF(priceint> 0)THEN SET FinalPrice = priceint; ELSEIF(price> 0)THEN SET FinalPrice = price - pricetht; ELSEIF(estprice> 0)THEN SET FinalPrice = estprice - pricetht; END IF;

END IF;

IF(sbwynum> 0)THEN IF(FinalPrice> 0)THEN RETURN FinalPrice; ELSEIF(adjprice> 0)THEN RETURN adjprice; ELSEIF(价格> 0)THEN 退货价格; ELSEIF(estprice> 0)THEN RETURN estprice; ELSE RETURN 0; END IF; ELSE RETURN 0; END IF;

END //

DELIMITER;

SQL查询:

CREATE FUNCTION`F_offshorePrice1(topsbwynum INTEGER,hulsbwynum INTEGER,sbwynum INTEGER,FLOAT adjprice(11,2),价格FLOAT(11,2),estprice FLOAT(11,2),pricehulint FLOAT(11,2),pricetopint FLOAT(11,2),pricehulcons FLOAT(11,2),pricetop FLOAT(11,2),priceint FLOAT(11,2),pricetht FLOAT(11,2))RETURNS float 20,2)NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER注释'这个函数将用于离岸定价系统引用ID:= 40516'开始声明FinalPrice VARCHAR(20); DECLARE err VARCHAR(20);为SQLEXCEPTION SET DECLARE CONTINUE HANDLER err = 1; IF(sbwynum> 0 AND hulsbwynum> 0 and sbwynum!= hulsbwynum AND(topsbwynum = sbwynum OR topsbwynum < 1 or topsbwynum IS NULL))然后如果(pricetopint> 0)则设置FinalPrice = pricetopint; ELSEIF(price> 0)THEN SET FinalPrice = price - pricehulcons; ELSEIF(estprice> 0)THEN SET FinalPrice = estprice - pricehulcons;万一;万一; IF(sbwynum> 0 AND topsbwynum> 0 and sbwynum!= topsbwynum AND(hulsbwynum = sbwynum OR hulsbwynum < 1 or hulsbwynum IS NULL))然后如果(pricehulint> 0)则设置FinalPrice = pricehulint; ELSEIF(价格> 0)然后设置FinalPrice = price - pricetop; ELSEIF(s.estprice> 0)THEN SET FinalPrice = estprice - pricetop;万一;万一; IF(sbwynum> 0 AND topsbwynum!= hulsbwynum AND hulsbwynum!= sbwynum AND topsbwynum!= sbwynum AND topsbwynum> 0 and hulsbwynum> 0)THEN IF(priceint> 0)THEN SET FinalPrice = priceint; ELSEIF(price> 0)THEN SET FinalPrice = price - (pricetop + pricehulcons); ELSEIF(estprice> 0)THEN SET FinalPrice = estprice - (pricetop + pricehulcons);万一;万一; IF(sbwynum> 0 AND topsbwynum = hulsbwynum AND sbwynum!= hulsbwynum AND hulsbwynum> 0)THEN IF(priceint> 0)THEN SET FinalPrice = priceint; ELSEIF(价格> 0)然后设置FinalPrice = price - pricetht; ELSEIF(estprice> 0)THEN SET FinalPrice = estprice - pricetht;万一;万一; IF(sbwynum> 0)THEN IF(FinalPrice> 0)THEN RETURN FinalPrice; ELSEIF(adjprice> 0)THEN RETURN adjprice; ELSEIF(价格> 0)然后返回价格; ELSEIF(estprice> 0)THEN RETURN estprice; ELSE RETURN 0;万一; ELSE RETURN 0;万一; END // DELIMITER;

MySQL表示:

1059 - 标识名称 'F_offshorePrice1(topsbwynum INTEGER,hulsbwynum INTEGER,sbwynum INTEGER,FLOAT adjprice(11,2),

PRI' 太长

人请告诉我这个用户定义的函数在MySQL 5.1中使用cPanel但是在EMS MANAGER 2007中它的运行正确。

+1

您是否收到错误讯息?如果是这样,那么错误信息是什么?或者它只是不按照你期望的方式工作?如果是这样,那么你期望的不是什么? – Trott 2011-05-17 05:58:57

+0

Trott函数未创建。 – Bajrang 2011-05-17 06:05:25

回答

1

第一行:

CREATE FUNCTION `F_offshorePrice1(topsbwynum INTEGER... 

尝试:

CREATE FUNCTION F_offshorePrice1(topsbwynum INTEGER... 

或者,万一'字符应该在那里,它似乎并不有一个对应的字符...

+0

是安德里安·施密特,我aggree用U。但生成错误。 – Bajrang 2011-05-17 06:11:05

+0

啊,那么我也许不能帮助:(我从来没有做过的SQL任何类似的事情... – 2011-05-17 06:15:25