mysql函数语法错误_MySQL存储函数与嵌套IF ... END IF,语法错误,正确的语法使用''附近''...

我有一个函数,目前我在PHP中使用它编译单独字段的邮件地址,但考虑到了不同地区使用的不同格式。我试图复制这个MySQL存储函数。我意识到,在代码中而不是在数据库中执行这种事情通常会更快,但是我们的Intranet有一种方式让人们以只读方式输入原始MySQL SELECT命令,以便他们可以构建高级搜索并保存查询。这个特定的功能将被使用,以便用户可以将他们的高级搜索查询结果输出到标签布局。

当我尝试使用phpMyAdmin 3.4.9(最新稳定版)存储函数时,出现以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 51我还安装了最新的MySQL Workbench并获得相同的错误,但它突出显示了“END附近的SQL语法错误”,因此它不仅仅是phpMyAdmin中的一个错误(尽管它可能是phpMyAdmin和MySQL Workbench中的一个错误)。

这里是函数查询:

DELIMITER ;;

DROP FUNCTION IF EXISTS ADDRESS_BUILD;;

CREATE FUNCTION ADDRESS_BUILD(contact VARCHAR(50), company VARCHAR(100), add1 VARCHAR(255), add2 VARCHAR(255), add3 VARCHAR(255), town_city VARCHAR(50), county_state VARCHAR(50), postcode_zip VARCHAR(50), country VARCHAR(100), `separator` VARCHAR(10), type VARCHAR(10))

RETURNS TEXT

DETERMINISTIC

BEGIN

DECLARE address TEXT;

DECLARE line TEXT;

IF LENGTH(TRIM(contact))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(contact)); END IF;

IF LENGTH(TRIM(company))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(company)); END IF;

IF LENGTH(TRIM(add1))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add1)); END IF;

IF LENGTH(TRIM(add2))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add2)); END IF;

IF LENGTH(TRIM(add3))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add3)); END IF;

IF country='United States of America' OR country='USA' OR country='Canada' OR country='CA' THEN

/* NORTH AMERICA, ALL ON 1 LINE */

IF LENGTH(TRIM(town_city))>0 THEN

IF type='mail' THEN SET line=CONCAT_WS('', TRIM(town_city), ' ');

ELSE SET line=CONCAT_WS('', line, TRIM(town_city), ', ');

END IF;

END IF;

IF LENGTH(TRIM(county_state))>0 THEN

IF type='mail' THEN SET line=CONCAT_WS('', line, TRIM(county_state), ' ');

ELSE SET line=CONCAT_WS('', line, TRIM(county_state), ' ');

END IF;

END IF;

IF LENGTH(TRIM(postcode_zip))>0 THEN SET line=CONCAT_WS('', line, TRIM(postcode_zip)); END IF;

SET address=CONCAT_WS(`separator`, address, TRIM(line));

ELSE IF country='United Kingdom' OR country='UK' THEN

/* UK, ASCENDING LOCALITY SEPARATE LINES */

IF LENGTH(TRIM(town_city))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(town_city)); END IF;

IF LENGTH(TRIM(county_state))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(county_state)); END IF;

IF LENGTH(TRIM(postcode_zip))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(postcode_zip)); END IF;

ELSE

/* EUROPE EVERYWHERE ELSE, ALL ON 1 LINE POSTCODE FIRST */

IF LENGTH(TRIM(postcode_zip))>0 THEN SET line=CONCAT_WS('', line, TRIM(postcode_zip)); END IF;

IF LENGTH(TRIM(town_city))>0 THEN SET line=CONCAT_WS('', line, ' ', TRIM(town_city)); END IF;

IF LENGTH(TRIM(county_state))>0 THEN SET line=CONCAT_WS('', line, ' ', TRIM(county_state)); END IF;

IF LENGTH(TRIM(line))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(line)); END IF;

END IF;

IF country='United States of America' THEN SET address=CONCAT_WS(`separator`, address, 'USA');

ELSE IF LENGTH(TRIM(country))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(country));

END IF;

RETURN address;

END;;第51行接近END IF,RETURN和END子句,但我无法发现任何错误。

任何人都可以在MySQL Workbench和phpMyAdmin中看到导致这个问题的原因吗?

一旦存储了函数,我就可以测试它并调整逻辑。

此外,如果功能中有任何可以精简的东西,请告诉我。这里没有太多的例子,所以我已经有点补丁了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值