MYSQL: 创建过程错误,插入语法错误
MYSQL: Create procedure ERRORS with syntax on Insert
所以我试图在使用过程插入数据库之前计算总成本。整个想法是检查延迟付款是否为空然后不为空以及值是否为 0。
到目前为止我有这个:
DELIMITER;;
CREATE OR REPLACE PROCEDURE add_transaction
(IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50),
IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME)
BEGIN
DECLARE latePayment int(11);
DECLARE total AS DOUBLE;
SELECT `LatePaymentFee`
INTO `latePayment`
FROM chittyusers
WHERE ChittyAccNo = NEW.ChittyAccNo;
CASE
WHEN latePayment IS NULL
THEN
SET total = amount ;
WHEN latePayment IS NOT NULL
THEN
SET total = amount + latePayment;
ELSE
SET total = amount;
END;
END CASE;
INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`,
`Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`)
VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid)
END;;
DELIMiTER;
当我尝试创建此过程时,出现 sql 语法错误:
MySQL said: Documentation
#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 '' at line 5
我是不是做错了什么,可以改变什么。刚开始使用这些,所以我还不完全了解它们是如何工作的。
此外,如果您需要数据库,就是这样:
CREATE TABLE `chittytransactions` (
`ChittyTransactionID` int(11) NOT NULL,
`AuctionID` int(11) NOT NULL,
`ChittyAccNo` int(11) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`Amount` double DEFAULT NULL,
`Description` varchar(50) DEFAULT NULL,
`TransRefence` varchar(50) DEFAULT NULL COMMENT 'Reference from actual Bank transaction',
`TransStatus` tinyint(1) DEFAULT NULL COMMENT 'If Transaction Pending or Cleared',
`ClearanceDate` datetime DEFAULT NULL,
`PaymentMethod` int(1) DEFAULT NULL COMMENT '0- Cash, 1- bank transfer, 2- personal credit etc'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `chittyusers` (
`ChittyAccNo` int(11) NOT NULL,
`UserId` int(11) NOT NULL,
`ChittyID` int(11) NOT NULL,
`LatePaymentFee` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
谢谢任何帮助都会很棒
- 需要一个分隔符
- "create or replace"好像没有被接受
- 总 变量声明中多了一个"as"
- 在"end case"
之前还有一个"end"
- 最后插入的末尾少了一个分号
这似乎被接受了:
drop procedure if exists add_transaction;
delimiter $$
CREATE PROCEDURE add_transaction
(IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50),
IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME)
BEGIN
DECLARE latePayment int(11);
DECLARE total DOUBLE;
SELECT `LatePaymentFee`
INTO `latePayment`
FROM chittyusers
WHERE ChittyAccNo = NEW.ChittyAccNo;
CASE
WHEN latePayment IS NULL
THEN
SET total = amount ;
WHEN latePayment IS NOT NULL
THEN
SET total = amount + latePayment;
ELSE
SET total = amount;
END CASE;
INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`,
`Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`)
VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid);
END;
$$
所以我试图在使用过程插入数据库之前计算总成本。整个想法是检查延迟付款是否为空然后不为空以及值是否为 0。
到目前为止我有这个:
DELIMITER;;
CREATE OR REPLACE PROCEDURE add_transaction
(IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50),
IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME)
BEGIN
DECLARE latePayment int(11);
DECLARE total AS DOUBLE;
SELECT `LatePaymentFee`
INTO `latePayment`
FROM chittyusers
WHERE ChittyAccNo = NEW.ChittyAccNo;
CASE
WHEN latePayment IS NULL
THEN
SET total = amount ;
WHEN latePayment IS NOT NULL
THEN
SET total = amount + latePayment;
ELSE
SET total = amount;
END;
END CASE;
INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`,
`Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`)
VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid)
END;;
DELIMiTER;
当我尝试创建此过程时,出现 sql 语法错误:
MySQL said: Documentation
#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 '' at line 5
我是不是做错了什么,可以改变什么。刚开始使用这些,所以我还不完全了解它们是如何工作的。
此外,如果您需要数据库,就是这样:
CREATE TABLE `chittytransactions` (
`ChittyTransactionID` int(11) NOT NULL,
`AuctionID` int(11) NOT NULL,
`ChittyAccNo` int(11) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`Amount` double DEFAULT NULL,
`Description` varchar(50) DEFAULT NULL,
`TransRefence` varchar(50) DEFAULT NULL COMMENT 'Reference from actual Bank transaction',
`TransStatus` tinyint(1) DEFAULT NULL COMMENT 'If Transaction Pending or Cleared',
`ClearanceDate` datetime DEFAULT NULL,
`PaymentMethod` int(1) DEFAULT NULL COMMENT '0- Cash, 1- bank transfer, 2- personal credit etc'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `chittyusers` (
`ChittyAccNo` int(11) NOT NULL,
`UserId` int(11) NOT NULL,
`ChittyID` int(11) NOT NULL,
`LatePaymentFee` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
谢谢任何帮助都会很棒
- 需要一个分隔符
- "create or replace"好像没有被接受
- 总 变量声明中多了一个"as"
- 在"end case" 之前还有一个"end"
- 最后插入的末尾少了一个分号
这似乎被接受了:
drop procedure if exists add_transaction;
delimiter $$
CREATE PROCEDURE add_transaction
(IN accTransactionId INT(11), IN auctionId INT(11), IN chittyAccNo INT(11), IN `date` DATETIME, IN amount DOUBLE, IN description VARCHAR(50),
IN transref VARCHAR(50), IN tranStat TINYINT, IN clearDate DATETIME, IN methodPaid DATETIME)
BEGIN
DECLARE latePayment int(11);
DECLARE total DOUBLE;
SELECT `LatePaymentFee`
INTO `latePayment`
FROM chittyusers
WHERE ChittyAccNo = NEW.ChittyAccNo;
CASE
WHEN latePayment IS NULL
THEN
SET total = amount ;
WHEN latePayment IS NOT NULL
THEN
SET total = amount + latePayment;
ELSE
SET total = amount;
END CASE;
INSERT INTO `chittytransactions` (`ChittyTransactionID`, `AuctionID`, `ChittyAccNo`, `Date`, `Amount`,
`Description`, `TransRefence`, `TransStatus`, `ClearanceDate`, `PaymentMethod`)
VALUES (accTransactionId, auctionId, chittyAccNo, `date`, amount, description, transref, tranStat, clearDate, methodPaid);
END;
$$