2016-07-16 6 views
0

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

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `aad_adr`.` PROCEDURE MonthlySalesReport(fromdate DATE,todate DATE)` $$ 
CREATE PROCEDURE `aad_adr`.` PROCEDURE MonthlySalesReport(fromdate DATE,todate DATE)`() 
BEGIN 
Declare fd DATE; 
Declare ed DATE; 
SET fd=fromdate; 
SET ed=todate; 
WHILE DATE(fd)<=DATE(ed)DO 
select bill_master.bill_no,DATE_FORMAT(bill_master.bill_date, '%y/%m/%d') AS 'formatted_date',transaction.product_id,transaction.tax_amount,transaction.amount,transaction.amount-transaction.tax_amount as 'without_tax ',product_master.Product_name,product_master.vat from bill_master inner join transaction on bill_master.bill_no=transaction.bill_no inner join product_master on transaction.product_id=product_master.product_id where vat='14.50' and DATE_FORMAT(bill_master.bill_date, '%y/%m/%d') fd; 
SET fd=DATE_ADD(fd,INTERVAL 1 DAY); 
END WHILE; 
END $$ 

DELIMITER; 

ошибка:

Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fd; 
SET fd=DATE_ADD(fd,INTERVAL 1 DAY); 
END WHILE; 
END' at line 8 
+0

удалить после FD DATE_FORMAT в где п ... –

+1

спасибо теперь он выполнен –

+0

Если вы получили решение на этот пост, то вы должны следовать этому HTTP: // мета. stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

ответ

0

Во-первых у вас есть два ERREUR: первое это имя процедуры

CREATE PROCEDURE `aad_adr`.` PROCEDURE MonthlySalesReport(fromdate DATE,todate DATE)`() 

--->

CREATE PROCEDURE `aad_adr`.`MonthlySalesReport`(fromdate DATE,todate DATE) 

так процедура должна быть такой:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `aad_adr`.`MonthlySalesReport`$$ 
CREATE PROCEDURE `aad_adr`.`MonthlySalesReport`(fromdate DATE,todate DATE) 
BEGIN 
Declare fd DATE; 
Declare ed DATE; 
SET fd=fromdate; 
SET ed=todate; 
WHILE DATE(fd)<=DATE(ed)DO 
select 
bill_master.bill_no, 
DATE_FORMAT(bill_master.bill_date,'%y/%m/%d') AS 'formatted_date', 
transaction.product_id, 
transaction.tax_amount, 
transaction.amount, 
transaction.amount-transaction.tax_amount as 'without_tax ', 
product_master.Product_name, 
product_master.vat 
from 
bill_master inner join transaction on bill_master.bill_no=transaction.bill_no 
inner join product_master on transaction.product_id=product_master.product_id 
where 
vat='14.50' and vat='14.50' and DATE_FORMAT(bill_master.bill_date, '%y/%m/%d'); 
SET fd=DATE_ADD(fd,INTERVAL 1 DAY); 
END WHILE; 
END $$ 
DELIMITER ; 
+0

жаль, что я не заметил drop cammand, поэтому вам нужно обновить имя тоже, я отредактировал свой ответ, попробуйте и скажите, работает ли он – Cherif

+0

это должно работать, но что вы подразумеваете под DATE_FORMAT (bill_master.bill_date, '% y /% m /% d') дата такая же, как в sql, или bill_date является VARCHAR? – Cherif

0

Ошибка в выбранном вами запросе, который вы вызываете неправильно, когда условие. Так что просто удалите DATE_FORMAT в разделе where И нужно еще одно изменение, просто замените DELIMITER; на DELIMITER$$ последним.

Обновление 1: Изменено Допустимое имя SP.

Так Обновленный Кодекс:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `aad_adr`.`MonthlySalesReport` $$ 
CREATE PROCEDURE `aad_adr`.`MonthlySalesReport`(IN fromdate DATE,IN todate DATE) 
    BEGIN 
     DECLARE fd DATE; 
     DECLARE ed DATE; 
     SET fd=fromdate; 
     SET ed=todate; 
     WHILE DATE(fd)<=DATE(ed)DO 
      SELECT bill_master.bill_no,DATE_FORMAT(bill_master.bill_date, '%y/%m/%d') AS 'formatted_date',transaction.product_id,transaction.tax_amount,transaction.amount,transaction.amount-transaction.tax_amount AS 'without_tax ',product_master.Product_name,product_master.vat FROM bill_master INNER JOIN TRANSACTION ON bill_master.bill_no=transaction.bill_no INNER JOIN product_master ON transaction.product_id=product_master.product_id WHERE vat='14.50' AND bill_master.bill_date=fd; 
      SET fd=DATE_ADD(fd,INTERVAL 1 DAY); 
     END WHILE; 
    END $$ 
DELIMITER$$