MySQL, ЕСЛИ ОН НЕ СУЩЕСТВУЕТ … ЗАТЕМ заявление

#mysql #if-statement #not-exists

Вопрос:

Я работаю на 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…ТОГДА заявление?

Комментарии:

1. Что у тебя есть до этого? Убедитесь, что вы закончили предыдущее утверждение ; .

2.Научитесь завершать все заявления, как прокомментировал @Barмар. Также: Синтаксис IF <condition> THEN <some statements> END IF; (как и в большинстве процедурных расширений СУБД), а не IF <condition> BEGIN <some statements> END; (более или менее исключительно в SQL Server и, возможно, в Sysbase). Хотя, все же бессмысленно, может BEGIN ... END быть, внутри THEN будет разрешен блок и END IF .

3. @stickybit Прокрутите вправо, есть THEN . Но это действительно нужно END IF после END .

4. @Бармар: Да, я это уже видел. Но есть, как вы также заметили, нет END IF; , по крайней мере, не в показанном коде.

5. Я изменил, чтобы включить весь код хранимой процедуры и ошибку.

Ответ №1:

Оператор IF не требует начала. Синтаксис, который я использовал выше, таков:

 IF <condition> THEN
BEGIN

END IF;
 

Это должно было быть:

 IF <condition> THEN

END IF;