【问题标题】:MySQL IF NOT EXISTS ... THEN statementMySQL IF NOT EXISTS ... THEN 语句
【发布时间】:2021-10-20 10:36:42
【问题描述】:

我来自 SQL Server 背景,但现在正在开发 MySQL。我有一个存储过程,我想在其中包含以下构造:


DROP PROCEDURE IF EXISTS CreateLicence;

DELIMITER //
CREATE PROCEDURE CreateLicence
    (OUT pLicenceID INT,
    INOUT pUsrID INT,
    INOUT pMethodCode VARCHAR(10),
    INOUT pPaymentReference VARCHAR(50),
    INOUT pPaymentAmount DECIMAL(13, 2),
    INOUT pProductCode VARCHAR(5),
    OUT pMessage VARCHAR(200)
    )
/*
    Creates a new user record, which needs to have its email verified.
*/
entire_sproc:
BEGIN
    DECLARE vRecCount INT;
    
    
    START TRANSACTION;

    -- is the MethodCode valid?
    IF (pMethodCode <> 'PAYPAL') THEN
    BEGIN
        ROLLBACK;
        SET pMessage = 'Invalid MethodCode.';
        SET pLicenceID = NULL;
        LEAVE entire_sproc;
    END IF;
    
    
    -- is the ProductCode valid?
    IF (NOT EXISTS (SELECT ProductCode FROM Product WHERE ProductCode = pProductCode)) THEN
    BEGIN
        ROLLBACK;
        SET pMessage = 'Invalid ProductCode.';
        SET pLicenceID = NULL;
        LEAVE entire_sproc;
    END IF;


    INSERT INTO Licence
            (UsrID,
            MethodCode,
            Status,
            PaymentReference,
            PaymentDateTime,
            PaymentAmount,
            ProductCode)
    VALUES
            (pUsrID,
            pMethodCode,
            'UNAPPLIED',
            pPaymentReference,
            NOW(),
            pPaymentAmount,
            pProductCode);


    SET pLicenceID = (SELECT LAST_INSERT_ID());
    
    
    COMMIT;
    
    
END;
//

DELIMITER ;

我在编译时收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF;
    
    
    -- is the ProductCode valid?
    IF (NOT EXISTS (SELECT ProductC...' at line 27

这个 SQL 结构有哪些不允许的地方?如何测试 IF...THEN 语句中是否存在记录?

【问题讨论】:

  • 在那之前你有什么?确保以 ; 结束上一条语句。
  • 如@Barmar 评论的那样学习终止所有语句。另外:语法是IF &lt;condition&gt; THEN &lt;some statements&gt; END IF;(就像在大多数DBMS 的程序扩展中一样),而不是IF &lt;condition&gt; BEGIN &lt;some statements&gt; END;(或多或少只在SQL Server 和可能的Sysbase 中)。虽然,也许 BEGIN ... END 块将被允许 THENEND IF 内,但毫无意义。
  • @stickybit 向右滚动,有THEN。但在END 之后确实需要END IF
  • @Barmar:是的,我已经看到了。但是,正如您也注意到的那样,没有END IF;,至少在显示的代码中没有。
  • 我已经修改为包含存储过程的所有代码和错误。

标签: mysql if-statement not-exists


【解决方案1】:

IF 语句不需要开始。我上面使用的语法是:

IF <condition> THEN
BEGIN

END IF;

应该是:

IF <condition> THEN

END IF;

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 2012-06-05
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多