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 ;
我正在为一个项目构建我的第一个 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 ;