2016-07-16 10 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が... –

+1

あなたは、あなたがこのHTTPに従ってください。この記事に解決策を持っている場合、それは –

+0

を実行しています今、あなたに感謝します。 stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

答えて

0

まずあなたが持っている2 erreur: 最初のものはありPROCEDUREの名前

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

申し訳ありません私はドロップキャンパンをメモしていなかったので、名前を更新する必要があります。私の回答を編集しました。試してみてください。 – Cherif

+0

これは動作するはずですが、何を意味するのですか DATE_FORMAT(bill_master.bill_date、 '%y /%m /%d')sqlまたはbill_dateの日付がこのようにオーバレイしていますvarchar? – Cherif

0

条件が間違っていると誤って呼び出しています。だからどこの句でDATE_FORMATを削除してください最後にDELIMITER;DELIMITER$$を置き換えるだけで、もう1つの変更が必要です。

更新1:変更SPの有効な名前。

ので、更新されたコードは次のとおりです。//メタ:where句で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$$ 
関連する問題