簡體   English   中英

使用IF語句創建SQL存儲過程

[英]Creating SQL stored procedure with IF Statement

我正在嘗試在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語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在第3行的'''SELECT p.productID,p.name,IF(LENGTH(p.description)<=?,p.description,CONCA')附近使用

我認為您想執行動態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 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM