Синтаксическая ошибка оператора случая хранимой процедуры MySQL - продолжение - PullRequest
0 голосов
/ 08 сентября 2018

Процедура содержит синтаксическую ошибку. Пожалуйста, помогите мне в поиске ошибки. MySQL Workbench говорит, что это имеет 8 ошибок, и это не может быть применено к базе данных. Я уже разместил этот вопрос. Люди сказали мне изменить оператор CASE на IF. Даже после изменений ошибка сохраняется. Я не знаю, как вложить этот пост в исходный вопрос. Фактическое сообщение было размещено в этой ссылке . Пересмотренный синтаксис опубликован по запросу @ Caius Jard

CREATE PROCEDURE `calculate_amount` (in IN_book_id INT,  in IN_qty INT )
BEGIN
-- declare
DECLARE m_prdct VARCHAR(10);
DECLARE m_cust_id INT(5);

-- select into
SELECT 
    Product
FROM
    Bookings
WHERE
    Book_id = IN_book_id INTO m_prdct;

SELECT 
    Cust_id
FROM
    Bookings
WHERE
    Book_id = IN_book_id INTO m_cust_id;

-- conditionals & action
IF (m_prdct = '20ltr') THEN
INSERT INTO Amount(Cust_id,Book_id,Can,300ml,500ml,1lit,2lit) VALUES(m_cust_id,IN_book_id,(SELECT Rate.Can*Bookings.Qty FROM Rate,Bookings WHERE Bookings.Book_id=IN_book_id),0,0,0,0); 

ELSEIF (m_prdct = '300ml') THEN
INSERT INTO Amount(Cust_id,Book_id,Can,300ml,500ml,1lit,2lit) VALUES(m_cust_id,IN_book_id,0,(SELECT Rate.300ml*Bookings.Qty FROM Rate,Bookings WHERE Bookings.Book_id=IN_book_id),0,0,0);

ELSEIF (m_prdct = '500ml') THEN 
INSERT INTO Amount(Cust_id,Book_id,Can,300ml,500ml,1lit,2lit) VALUES(m_cust_id,IN_book_id,0,0,(SELECT Rate.500ml*Bookings.Qty FROM Rate,Bookings WHERE Bookings.Book_id=IN_book_id),0,0); 

ELSEIF (m_prdct = '1ltr') THEN 
INSERT INTO Amount(Cust_id,Book_id,Can,300ml,500ml,1lit,2lit) VALUES(m_cust_id,IN_book_id,0,0,0,(SELECT Rate.1lit*Bookings.Qty FROM Rate,Bookings WHERE Bookings.Book_id=IN_book_id),0); 

ELSE 
INSERT INTO Amount(Cust_id,Book_id,Can,300ml,500ml,1lit,2lit) VALUES(m_cust_id,IN_book_id,0,0,0,0,(SELECT Rate.2lit*Bookings.Qty FROM Rate,Bookings WHERE Bookings.Book_id=IN_book_id)); 
-- end
END IF;
END

1 Ответ

0 голосов
/ 08 сентября 2018

Вам нужно заключить в кавычки идентификаторы, которые начинаются с цифры:

INSERT INTO Amount(Cust_id,Book_id,Can,`300ml`,`500ml`,`1lit`,`2lit`) ... 
...