2011-05-17 95 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