MySql MariaDB 创建过程错误

MySql MariaDB create Procedure error

我正在为一个项目构建我的第一个 mySQL 数据库,将数据库从 MS Access 传输到 mysql。现在我知道我有一个巨大的学习曲线但是没关系,我总有一天会学会的。

我正在 XAMPP-phpMyAdmin 的 mySQL 数据库中构建此数据库。

我遇到的问题是创建程序,这里是完整的程序: (由于我工作的机密性,某些 table 或变量名称已更改,因此无需评论 Table1 是一个错误的名称等。我已经知道)

DELIMITER $$

DROP PROCEDURE IF EXISTS Proc1$$

CREATE PROCEDURE Proc1(IN pType INT)

BEGIN

SET @runningTotal=0, @prevTotal=0, @Aim=5, @Period=21;

DROP TEMPORARY TABLE IF EXISTS temp_table;


CREATE TEMPORARY TABLE IF NOT EXISTS temp_table(
  `id` int(11) NOT NULL,
  `dDate` date DEFAULT NULL,
  `type` int(11) DEFAULT NULL,
  `MyAmountCol` int(11) DEFAULT NULL
);

INSERT INTO temp_table(`id`, `dDate`, `type`, `MyAmountCol`) 
  SELECT `id`, `dDate`, `type`, `MyAmountCol` 
  FROM Table1 
  WHERE type=pType AND 
        table1.dDate>=DATE_SUB(CURDATE(), INTERVAL @Period DAY) AND
        table1.dDate!=CURDATE();

DROP TEMPORARY TABLE IF EXISTS temp_table_result;

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table_result AS
  SELECT
    temp_table.Id,
    temp_table.dDate,
    temp_table.MyAmountCol,
    DATE_ADD(temp_table.dDate, INTERVAL @Period DAY) as 'RecDay',
    DATE_ADD(@prevDate, INTERVAL @Period DAY) As 'NextRecDay',
    @prevTotal := @runningTotal as 'PreviousTotal',
    @Aim -@prevTotal as 'MinAmmount',
    @runningTotal := @runningTotal + temp_table.MyAmountCol as 'RunningTotal',
    @prevDate := temp_table.dDate
    pType as 'Type'
  FROM temp_table 
  HAVING PreviousTotal <= @Aim
  ORDER BY RunningTotal DESC LIMIT 1;

UPDATE Result A INNER JOIN temp_table_result B (A.type = B.Type) 
  SET  A.RecDay=B.RecDay, A.NextRecDay=B.NextRecDay, A.MinHours=B.MinAmmount;

DROP TEMPORARY TABLE IF EXISTS temp_table;
DROP TEMPORARY TABLE IF EXISTS temp_table_result;

END;
$$
DELIMITER ;

所以问题是我花了一整天的时间查看出现以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'as 'Type'
FROM temp_table 
HAVING PreviousTotal <= @Aim
ORDER BY Runn' at line 37

我知道这是一个语法错误,我一直在慢慢地一个一个地修复语法错误,(边创造边学习的乐趣)。但是我想不通这个语法错误。

感谢您的帮助

试试下面的代码。 希望这会有所帮助。

DROP PROCEDURE IF EXISTS Proc1;
DELIMITER $$
CREATE PROCEDURE Proc1(IN pType INT)

BEGIN

SET @runningTotal=0, @prevTotal=0, @Aim=5, @Period=21;

DROP TEMPORARY TABLE IF EXISTS temp_table;


CREATE TEMPORARY TABLE IF NOT EXISTS temp_table(
  `id` int(11) NOT NULL,
  `dDate` date DEFAULT NULL,
  `type` int(11) DEFAULT NULL,
  `MyAmountCol` int(11) DEFAULT NULL
);

INSERT INTO temp_table(`id`, `dDate`, `type`, `MyAmountCol`) 
  SELECT `id`, `dDate`, `type`, `MyAmountCol` 
  FROM Table1 
  WHERE type=pType AND 
        table1.dDate>=DATE_SUB(CURDATE(), INTERVAL @Period DAY) AND
        table1.dDate!=CURDATE();

DROP TEMPORARY TABLE IF EXISTS temp_table_result;

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table_result AS
  SELECT
    temp_table.Id,
    temp_table.dDate,
    temp_table.MyAmountCol,
    DATE_ADD(temp_table.dDate, INTERVAL @Period DAY) as 'RecDay',
    DATE_ADD(@prevDate, INTERVAL @Period DAY) As 'NextRecDay',
    @prevTotal := @runningTotal as 'PreviousTotal',
    @Aim -@prevTotal as 'MinAmmount',
    @runningTotal := @runningTotal + temp_table.MyAmountCol as 'RunningTotal',
    @prevDate := temp_table.dDate, <--- Make change at this line.
    pType as 'Type'
  FROM temp_table 
  HAVING PreviousTotal <= @Aim
  ORDER BY RunningTotal DESC LIMIT 1;

UPDATE Result A INNER JOIN temp_table_result B ON(A.type = B.Type) 
  SET  A.RecDay=B.RecDay, A.NextRecDay=B.NextRecDay, A.MinHours=B.MinAmmount;

DROP TEMPORARY TABLE IF EXISTS temp_table;
DROP TEMPORARY TABLE IF EXISTS temp_table_result;

END;
$$
DELIMITER ;