使用CONCAT时,MySQL过程创建失败

时间:2012-05-15 13:25:55

标签: mysql stored-procedures concat

我遇到了MySQL v.5.0.091-log的问题。该数据库由我的客户提供商(1& 1)提供,因此我无法控制该版本,也无法控制他们提供给我们使用的phpMyAdmin(版本2.6.4-pl3)。

我的公司大部分时间都使用存储过程和功能来提高效率和安全性。我写了一个在我们的本地开发数据库上工作正常的sproc,但是当我尝试将它添加到主机上的测试或生产MySQL服务器时,create语句失败。由于它们提供的phpMyAdmin版本不能与存储过程一起使用,因此我们拥有自己的接口,可以对它们进行维护。它已经过测试,不是问题的原因。

以下是程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `objectGetOpenObjectsInfo`()
BEGIN

SELECT     bldgobjects.objectId, CONCAT(objectrentinfo.shortDesc,'<br/>',bldginfo.address, ', ',bldginfo.city) AS objTitle,  
   CONCAT(imagelist.fileDirectory, imagelist.fileName) AS objImg
FROM         objectrentinfo INNER JOIN
                      bldgobjects ON objectrentinfo.objectId = bldgobjects.objectId INNER JOIN
                      bldginfo ON bldgobjects.bldgId = bldginfo.bldgId INNER JOIN
                      bldgimages ON bldgobjects.bldgId = bldgimages.bldgId INNER JOIN
                      imagelist ON bldgimages.imageId = imagelist.imageId
WHERE     (objectrentinfo.isOpen = 1) AND (imagelist.imgType = 1)
ORDER BY bldginfo.address;

END

问题特别是CONCAT声明。只要它们在过程中,create语句就不会执行。一旦改为:

SELECT     bldgobjects.objectId, objectrentinfo.shortDesc, bldginfo.address, bldginfo.city,  
           imagelist.fileDirectory, imagelist.fileName

create语句执行,我有我的sproc。我一遍又一遍地看着它,很可能是我忽略了一些微小的语法错误,但我不知所措。有什么建议?提前致谢,感谢任何人提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

这可能是phpmyadmin中的分隔符问题,如果可能的话尝试另一个MySQL客户端或尝试此代码,没有BEGIN-END子句 -

CREATE DEFINER = `root`@`localhost` PROCEDURE `objectGetOpenObjectsInfo`()
  SELECT bldgobjects.objectId
       , CONCAT(objectrentinfo.shortDesc, '<br/>', bldginfo.address, ', ', bldginfo.city) AS objTitle
       , CONCAT(imagelist.fileDirectory, imagelist.fileName) AS objImg
  FROM
    objectrentinfo
  INNER JOIN bldgobjects
    ON objectrentinfo.objectId = bldgobjects.objectId
  INNER JOIN bldginfo
    ON bldgobjects.bldgId = bldginfo.bldgId
  INNER JOIN bldgimages
    ON bldgobjects.bldgId = bldgimages.bldgId
  INNER JOIN imagelist
    ON bldgimages.imageId = imagelist.imageId
  WHERE
    (objectrentinfo.isOpen = 1) AND (imagelist.imgType = 1)
  ORDER BY
    bldginfo.address;