创建存储过程时出错

Error creating stored procedure

MariaDB 10 Windows

在 MySQL Workbench 中创建以下存储过程时,出现错误 1064。错误标记在最后一行 "LIMIT 1"。尝试在 HeidiSQL 中创建它也是 returns 错误 1064。这表明缺少括号,但缺少 none。

感谢任何帮助:

CREATE PROCEDURE `available_room` (in p_client_id int(11), in p_room_id int(11), in dateQF date, in a_gender varchar(3))
BEGIN
SELECT
    room_name,
    room_type_name,
    counted, 
    num_guests,
    minimum,
    room_id AS room_id_selected 
FROM    (SELECT * FROM room
WHERE   room_id=p_room_id AND
(NOT EXISTS (
SELECT  * FROM invoice
WHERE   client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND 
    commit_invoice=1 AND
    room_id = product_id AND
    gender != a_gender
    ) OR
(NOT EXISTS (
SELECT  * FROM invoice
WHERE   client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND  
    commit_invoice=1 AND
    room_id = product_id
    ))))A 
LEFT JOIN room_type_content ON
    room_type_content.room_type_id=A.room_type AND
    language_id='en'
LEFT JOIN(SELECT product_id, count(product_id)AS counted, MIN(NULLIF(quantity,0))AS minimum FROM invoice
WHERE   gender =a_gender AND 
    client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND  
    (commit_invoice=1 OR commit_invoice=3) AND
    invoice_set !='SYSTEM'
GROUP BY product_id)B
ON      B.product_id=p_room_id 
ORDER BY counted DESC
LIMIT 1
END

您在 LIMIT 1 后忘记了一个分号。

您还需要在创建过程前后更改标准分隔符。

文档:CREATE PROCEDURE and CREATE FUNCTION Syntax

您的代码的固定版本:

DELIMITER $$
CREATE PROCEDURE `available_room` (in p_client_id int(11), in p_room_id int(11), in dateQF date, in a_gender varchar(3))
BEGIN
SELECT
    room_name,
    room_type_name,
    counted, 
    num_guests,
    minimum,
    room_id AS room_id_selected 
FROM    (SELECT * FROM room
WHERE   room_id=p_room_id AND
(NOT EXISTS (
SELECT  * FROM invoice
WHERE   client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND 
    commit_invoice=1 AND
    room_id = product_id AND
    gender != a_gender
    ) OR
(NOT EXISTS (
SELECT  * FROM invoice
WHERE   client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND  
    commit_invoice=1 AND
    room_id = product_id
    ))))A 
LEFT JOIN room_type_content ON
    room_type_content.room_type_id=A.room_type AND
    language_id='en'
LEFT JOIN(SELECT product_id, count(product_id)AS counted, MIN(NULLIF(quantity,0))AS minimum FROM invoice
WHERE   gender =a_gender AND 
    client_id=p_client_id AND
    product_type = 'LODGING' AND 
    dateQF BETWEEN date1 AND DATE(DATE_ADD(date2, INTERVAL -1 DAY)) AND  
    (commit_invoice=1 OR commit_invoice=3) AND
    invoice_set !='SYSTEM'
GROUP BY product_id)B
ON      B.product_id=p_room_id 
ORDER BY counted DESC
LIMIT 1;
END $$
DELIMITER ;