设置存储过程参数时出现mysql语法错误

标签 mysql mysql-workbench mysql-error-1064

我为 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

最佳答案

您调用的选择查询错误 where 条件。因此,只需删除 where 子句中的 DATE_FORMAT 并需要再进行一次修改,只需将 DELIMITER; 替换为最后的 DELIMITER$$

更新一:修改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$$

关于设置存储过程参数时出现mysql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38408578/

相关文章:

Mysql从其他计算机连接到xampp服务器?错误1045

MySQL 查询错误,名为 "order"的表

mysql - 连接到 Docker 容器中的 MySQL(Windows/VirtualBox 上的 Vagrant)

mysql - 内连接后只读 (MySQL)

mysql - Sql 查询查找按 id 排序和分组

mysql - 在 Rails 中设置连接表

mysql - ruby mysqlplus 适配器生产准备好了吗

在语句末尾使用 "IDENFIFIED BY "时出现 mysql 错误

php - 大写 FROM 导致错误 1064

mysql - SQL Desc 列名不被接受?