Поэтому у меня есть эти таблицы:базы данных триггер перед тем вставкой и расчеты
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 TABLE `users` (
`UserId` int(11) NOT NULL,
`UserName` varchar(45) NOT NULL,
`UserNameVerified` tinyint(1) DEFAULT '0',
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Что Im пытается сделать, это проверить, если дата операции такая же, как очищенную дату в chittytransaction
таблице и, если не добавить в конце плата за уплату в таблицу chittyusers
(предпочтительнее рассчитывать на основе каждого дня, добавляется дополнительная плата за просрочку платежа на основе даты). Это должно быть сделано до и вставить, и я использую триггер. До сих пор у меня есть это:
ROP TRIGGER IF EXISTS chitty_beforet_trig;
DELIMITER ;;
CREATE TRIGGER chitty_beforet_trig BEFORE Insert ON chittytransaction
FOR EACH ROW
BEGIN
DECLARE `mainDate` datetime;
DECLARE `claredDate` datetime;
DECLARE `chitAccNo` INT(11);
DECLARE `userId` INT(11);
DECLARE `latePay` DOUBLE;
DECLARE late TINYINT;
DECLARE cursor1 CURSOR FOR SELECT ChittyAccNo FROM accounting.`chittyusers`;
DECLARE cursor2 CURSOR FOR SELECT `Date` FROM accounting.`chittyTransaction`;
DECLARE cursor3 CURSOR FOR SELECT ClearanceDate FROM accounting.`chittyTransaction`;
DECLARE cursor4 CURSOR FOR SELECT UserId FROM accounting.`users`;
OPEN cursor1;
OPEN cursor2;
OPEN cursor3;
OPEN cursor4;
FETCH cursor1 INTO chitAccNo;
FETCH cursor2 INTO mainDate
FETCH cursor3 INTO claredDate;
FETCH cursor3 INTO userId;
CASE
WHEN claredDated <> mainDate THEN
SET late ='1';
ELSE
SET late = '0';
END;
END CASE;
IF late THEN
UPDATE `chittyusers` SET LatePaymentFee = 50 WHERE UserId = userId;
END IF;
CLOSE cursor1;
CLOSE cursor2;
CLOSE cursor3;
CLOSE cursor4;
END;;
DELIMITER;
я получаю много различных ошибок и т.д. объявлений я не знаю, если я делаю это правильно или нет. Никогда не использовали их раньше, так что это немного сложно. Может кто-нибудь сказать мне, что я делаю неправильно, и любые решения будут оценены.
спасибо. Выяснил это благодаря вам. но почему существует проблема с использованием случая? – luffy
Нет проблем; это просто не нужно. С его помощью сокращаются переменные, строки кода и сложность. –
Я использую это неправильно, хотя ?. если да, как бы я его изменил? – luffy