【问题标题】:what is wrong with this mysql function这个mysql函数有什么问题
【发布时间】: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


【解决方案1】:

第一行:

CREATE FUNCTION `F_offshorePrice1(topsbwynum INTEGER...

试试:

CREATE FUNCTION F_offshorePrice1(topsbwynum INTEGER...

或者,如果 ` 字符应该在那里,它似乎没有匹配的结束字符...

【讨论】:

  • 是的 Andrian Schmidt,我同意你的看法。但仍然会产生错误。
猜你喜欢
  • 2011-01-17
  • 1970-01-01
  • 2017-03-26
  • 2014-06-29
  • 2011-02-13
  • 2011-04-24
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多