簡體   English   中英

創建存儲過程時出錯

[英]Error creating stored procedure

Windows上的MariaDB 10

在MySQL Workbench中創建以下存儲過程時,出現錯誤1064。該錯誤標記在最后一行“ LIMIT 1”上。 嘗試在HeidiSQL中創建它也會返回錯誤1064。這表明缺少括號,但沒有括號。

任何幫助表示贊賞:

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和CREATE FUNCTION語法

固定版本的代碼:

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 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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