0

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 が作成されます。私はそれを何度も見てきましたが、おそらく見落としていた小さな構文エラーですが、途方に暮れています。助言がありますか?事前に感謝し、誰でも提供できる助けに感謝します。

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 に答える