簡體   English   中英

如何在 MYSQL 存儲過程中使用 if else 條件?

[英]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.

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