Initial_Fees
이라는 테이블이 있습니다. 이 표에는 Initial_Consult_Fee
이라는 열이 있는데, 연간 30,000 개를 초과 할 수 없습니다. 아래 테이블이 있습니다.MySQL에서 계산 후 변수가 NULL이됩니다.
CREATE TABLE `initial_fees` (
`idInitial_Fees` int(11) NOT NULL AUTO_INCREMENT,
`idPortfolio` int(11) NOT NULL,
`Current_Time_Stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Initial_Gross_Fee` double NOT NULL,
`Initial_Consult_Fee` double NOT NULL,
`Updated_Date` date NOT NULL,
`idTransactions` int(11) DEFAULT NULL,
PRIMARY KEY (`idInitial_Fees`)
)
그래서, 나는 Initial_Consult_Fee
30,000 여부 이상 여부를 체크 할 것 트리거를 만들었습니다. 그것과 별개로 모든 값을 반올림합니다.
DELIMITER $$
CREATE TRIGGER `Initial_Fees_BINS` BEFORE INSERT ON `Initial_Fees` FOR EACH ROW
begin
DECLARE `initial` DOUBLE;
DECLARE `ongoing` DOUBLE;
DECLARE `total` DOUBLE;
DECLARE `valueToBeEntered` DOUBLE;
SET `initial`:=(SELECT SUM(`Initial_Consult_Fee`) FROM `Initial_Fees` WHERE `Updated_Date` BETWEEN MAKEDATE(YEAR(New.Updated_Date),1) AND MAKEDATE(YEAR(New.Updated_Date),365));
SET `ongoing`:=(SELECT SUM(`Ongoing_Consult_Fee`) FROM `Ongoing_Fees` WHERE `Updated_Date` BETWEEN MAKEDATE(YEAR(New.Updated_Date),1) AND MAKEDATE(YEAR(New.Updated_Date),365));
SET `total` := `initial`+`ongoing`;
IF((New.Initial_Consult_Fee+`total`) > 30000) THEN
SET `valueToBeEntered`:= 30000 - `total`;
END IF;
IF((New.Initial_Consult_Fee+`total`) < 30000) THEN
SET `valueToBeEntered`:= New.Initial_Consult_Fee;
END IF;
SET New.Initial_Gross_Fee = ROUND(New.Initial_Gross_Fee,2),
New.Initial_Consult_Fee = ROUND(`valueToBeEntered`,2);
END;
그러나
, 내가 데이터를 입력하고 New.Initial_Vision_Fee+total
내가 내 코드에 문제가 있습니다 무엇 아래 오류
Column 'Initial_Consult_Fee' cannot be null
을 얻는 경우에?
hmm..It은 여전히 말한다 같은 일 .. –
안녕하세요 ................? ...... –
@Sniper. . . 당신이 말하는 것은 거의 없을 것 같습니다. 답안의 수정은'total'이 절대'NULL'이 아니도록 보장해야하며, 코드를 읽음으로써'New.Initial_Consult_Fee'가 NULL이 아닌 한이 값을'NULL'로 설정할 수있는 유일한 방법입니다. 이 경우 새 값을'coalesce (New.Initial_Consult_Fee, 0)'로 설정하십시오. –