【发布时间】:2011-08-26 23:25:34
【问题描述】:
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 ;
错误:=
错误 您的 SQL 查询中似乎有错误。下面的 MySQL 服务器错误输出,如果有的话,也可以帮助您诊断问题
错误:未封闭的报价@ 16
STR:SQL: CREATE FUNCTIONF_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) )
返回浮动(20,2)
不确定的
包含 SQL
SQL 安全定义器
评论“此功能将用于离岸定价系统,请参阅邮件 ID:= 40516”
开始
DECLARE FinalPrice VARCHAR(20); 声明错误 VARCHAR(20);
为 SQLEXCEPTION SET err = 1 声明继续处理程序;
IF(sbwynum > 0 AND hulsbwynum > 0 and sbwynum != hulsbwynum AND (topsbwynum = sbwynum OR topsbwynum 0) 那么 SET FinalPrice = pricetopint; ELSEIF(价格 > 0)THEN SET FinalPrice = 价格 - pricehulcons; ELSEIF(estprice > 0)THEN SET FinalPrice = estprice - pricehulcons; 如果结束;
如果结束;
IF(sbwynum > 0 AND topsbwynum > 0 and sbwynum != topsbwynum AND (hulsbwynum = sbwynum OR hulsbwynum 0)THEN SET FinalPrice = pricehulint; ELSEIF(价格 > 0)THEN SET 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 如果(价格整数 > 0)那么 SET FinalPrice = priceint; ELSEIF(价格 > 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 如果(价格整数 > 0)那么 SET FinalPrice = priceint; ELSEIF(价格 > 0)THEN SET FinalPrice = price - pricetht; ELSEIF(estprice > 0)THEN SET FinalPrice = estprice - pricetht; 如果结束;
如果结束;
IF(sbwynum > 0)THEN 如果(最终价格 > 0)那么 返回最终价格; ELSEIF(adjprice > 0)THEN 返回调整价格; ELSEIF(价格 > 0)THEN 退货价格; ELSEIF(estprice > 0)THEN 返回估计价格; 别的 返回 0; 万一; 别的 返回 0; 如果结束;
结束 //
分隔符;
SQL 查询:
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) ) 返回 float(20,2) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '此功能将用于离岸定价系统 REFERS TO MAIL ID := 40516' BEGIN DECLARE FinalPrice VARCHAR(20);声明错误 VARCHAR(20);声明 SQLEXCEPTION SET err = 1 的继续处理程序; IF(sbwynum > 0 AND hulsbwynum > 0 and sbwynum != hulsbwynum AND (topsbwynum = sbwynum OR topsbwynum 0) THEN SET 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 OR hulsbwynum 0)THEN SET FinalPrice = pricehulint; ELSEIF(price > 0)THEN SET 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(price > 0)THEN SET FinalPrice = price - pricetht; ELSEIF(estprice > 0)THEN SET FinalPrice = estprice - pricetht;万一;万一; IF(sbwynum > 0)THEN IF(FinalPrice > 0)THEN RETURN FinalPrice; ELSEIF(adjprice > 0)然后返回 adjprice; ELSEIF(price > 0)THEN 返回价格; ELSEIF(estprice > 0)然后返回 estprice;否则返回 0;万一;否则返回 0;万一;结束 // 分隔符 ;
MySQL 说:
1059 - 标识符名称 'F_offshorePrice1(topsbwynum INTEGER, hulsbwynum INTEGER,sbwynum INTEGER, adjprice FLOAT(11,2),
pri' 太长了
谁能告诉我这个用户定义的函数在 mysql 5.1 中使用 cpanel 但在 EMS MANAGER 2007 运行正确时有什么问题。 非常感谢...
【问题讨论】:
-
您是否收到错误消息?如果是这样,错误信息是什么?或者它只是没有按您期望的方式工作?如果是这样,您所期望的没有做什么?
-
Trott 函数未创建。
标签: mysql