0

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

我的公司大部分时间都使用存储过程和函数来提高效率和安全性。我编写了一个在我们的本地开发数据库上运行良好的存储过程,但是当我尝试将它添加到主机上的测试或生产 MySQL 服务器时,创建语句失败。由于他们提供的 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

创建语句执行,我有我的存储过程。我一遍又一遍地查看它,很可能是我忽略了一些微小的语法错误,但我不知所措。有什么建议么?在此先感谢并感谢任何人可以提供的任何帮助。

4

1 回答 1

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;
于 2012-05-15T13:36:19.687 回答