[英]How to use if else condition in MYSQL stored procedure?
當我嘗試在存儲過程中使用 IF Else 條件時,出現語法錯誤
您的 SQL 語法有錯誤; 檢查與您的 MariaDB 服務器版本相對應的手冊,以了解在 'sortby = 1 THEN value2, value3 ASC; 附近使用的正確語法;
根據 MySQL 文檔,語法是
IF condition THEN
statements;
ELSE
else-statements;
END IF;
我的存儲過程:
DELIMITER $$
CREATE PROCEDURE test(IN _code INT, IN testformat SMALLINT(5), IN testcurrency CHAR, IN testdate Date, IN tesval CHAR(1), IN sortby INT)
BEGIN
SELECT value1, valu2, value3, value4
FROM shop
WHERE CODE1 = _code
ORDER BY
IF sortby = 1 THEN
value2, value3 ASC;
ELSE
value2, value3 DESC;
END;
END$$
DELIMITER ;
我找不到問題。 謝謝你的幫助。
IF/THEN/ELSE
結構本身就是一個語句。 它不是您可以放在查詢的ORDER BY
子句中的表達式。
但是您不能使用IF(condition, expr1, expr2)
function ,因為 function 必須返回一個標量,而不是一個列列表和一個 Z9778840A01040CB30C982ZB7B76 關鍵字。
您的問題的解決方案是:
DELIMITER $$
CREATE PROCEDURE test(
IN _code INT,
IN testformat SMALLINT(5),
IN testcurrency CHAR,
IN testdate Date,
IN tesval CHAR(1),
IN sortby INT)
BEGIN
IF sortby = 1 THEN
SELECT value1, valu2, value3, value4
FROM shop
WHERE CODE1 = _code
ORDER BY value2, value3 ASC;
ELSE
SELECT value1, valu2, value3, value4
FROM shop
WHERE CODE1 = _code
ORDER BY value2, value3 DESC;
END IF;
END$$
DELIMITER ;
由於唯一的區別是 SQL 關鍵字(不是值),因此縮短它的唯一方法是使用動態 SQL:
DELIMITER $$
CREATE PROCEDURE test(
IN _code INT,
IN testformat SMALLINT(5),
IN testcurrency CHAR,
IN testdate Date,
IN tesval CHAR(1),
IN sortby INT)
BEGIN
SET @query = CONCAT('
SELECT value1, valu2, value3, value4
FROM shop
WHERE CODE1 = _code
ORDER BY value2, value3 ', IF(sortby=1, 'ASC', 'DESC'));
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.