2016-07-16 4 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

먼저 당신이 두 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의 유효한 이름.

그래서 업데이트 코드입니다 : // 메타 : 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$$