2016-07-16 103 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 where子句中... –

+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是這樣awlay這是一個VARCHAR? – Cherif

0

錯誤在您選擇的查詢中您錯誤地調用了條件。因此,只需刪除where子句中的DATE_FORMAT並且需要再次修改,最後纔將DELIMITER;替換爲DELIMITER$$

更新1:修改SP的有效名稱。

所以更新的代碼是:DATE_FORMAT後

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$$