0

PHPmyadminでストアドプロシージャを作成しようとしていますが、IFステートメントが気に入らないようです。誰かが私が間違ったことを特定するのを手伝ってくれませんか:

SQL:

CREATE PROCEDURE get_products_in_category(IN inCategoryID INT, 
IN inShortDescriptionLength INT, IN inProductsPerPage INT, IN inStartItem INT)

BEGIN
"SELECT p.productID, p.name, IF(LENGTH(p.description) <= ?, p.description, 
 CONCAT(LEFT(p.description, ?), '...')) AS description, p.price, p.discounted_price, 
 p.thumbnail FROM tblProducts p

INNER JOIN tblProdCat pc
ON pc.productID = p.productID
WHERE tblProdCat.categoryID = ?
ORDER BY p.display DESC
LIMIT ?, ?";

SET @p1 = inShortDescriptionLength;
SET @p2 = inShortDescriptionLength;
SET @p3 = inCategoryID;
SET @p4 = inStartItem;
SET @p5 = inProductsPerPage;

END$$

次のエラーが発生します:

SQL構文にエラーがあります。3行目の「SELECTp.productID、p.name、IF(LENGTH(p.description)<=?、p.description、CONCA」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

1 に答える 1

0

動的 SQLを実行したいと思いますが、

DELIMITER $$
CREATE PROCEDURE get_products_in_category
(
    IN inCategoryID INT, 
    IN inShortDescriptionLength INT, 
    IN inProductsPerPage INT, 
    IN inStartItem INT
)
BEGIN

    SET @sql = CONCAT('SELECT   p.productID, 
                                p.name, 
                                IF(CHAR_LENGTH(p.description) <= ?, p.description, CONCAT(LEFT(p.description, ?), ''...'')) AS description, 
                                p.price, 
                                p.discounted_price, 
                                p.thumbnail 
                        FROM    tblProducts p
                                INNER JOIN tblProdCat pc
                                    ON pc.productID = p.productID
                        WHERE   pc.categoryID = ?
                        ORDER   BY p.display DESC
                        LIMIT   ',inStartItem, ', ',inProductsPerPage);



    PREPARE stmt1 FROM @sql;
    SET @p1 = inShortDescriptionLength;
    SET @p2 = inShortDescriptionLength;
    SET @p3 = inCategoryID;

    EXECUTE stmt1 USING @p1, @p2, @p3;
    DEALLOCATE PREPARE stmt1;
END $$
DELIMITER ;
于 2013-03-23T15:05:09.973 に答える