创建存储过程时出错
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 ;
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 ;