So habe ich diese Tabellen:Datenbank-Trigger vor dem Einsetzen und Berechnungen
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;
Was Im versuchen zu tun ist, zu überprüfen, ob ein Transaktionsdatum gleich dem gelöschten Datums in der chittytransaction
Tabelle ist und wenn nicht ein spätes hinzufügen Zahlungsgebühr an die chittyusers
Tabelle (vorzugsweise berechnet auf der Grundlage eines jeden Tages wird eine zusätzliche Gebühr zu verspäteter Zahlung basierend auf Datum hinzugefügt). Dies sollte vorher geschehen und einfügen und ich verwende einen Trigger. Bisher habe ich dies:
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;
Ich halte viele verschiedene Fehler bekommen etc Anzeige Ich weiß nicht, ob ich es richtig oder nicht mache. Habe diese vorher noch nie benutzt also ist es etwas schwierig. Kann mir bitte jemand sagen was ich falsch mache und jede Lösung würde mir gefallen.
Danke. Ich habe es dank dir herausgefunden. Aber warum gibt es ein Problem mit einem Fall? – luffy
Es gibt kein Problem; es ist einfach nicht notwendig. Durch das Verbergen werden Variablen, Codezeilen und Komplexität reduziert. –
verwende ich es falsch? Wenn ja, wie würde ich es ändern? – luffy