我遇到了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。我一遍又一遍地看着它,很可能是我忽略了一些微小的语法错误,但我不知所措。有什么建议?提前致谢,感谢任何人提供的任何帮助。
答案 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;