2014-10-10 3 views
0

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 

을 얻는 경우에?

답변

1

몇 개의 의견.

먼저 모든 포트폴리오에서 컨설팅 비용을 조사하고 있습니다. 특이한 것 같습니다. 그것은 귀하의 설명을 따르지만, 나는 그 포트폴리오가 어떤 요소에 기초 할 것으로 기대합니다.

두 번째로 ingoing 또는 outgoing 테이블에 일치하는 항목이 없을 때 문제가 발생합니다. 변수의 값은 NULL입니다.

당신은 쉽게 같은 수행하여이 문제를 해결할 수 있습니다

SET `total` := coalesce(`initial`, 0) + coalesce(`ongoing`, 0); 
+0

hmm..It은 여전히 ​​말한다 같은 일 .. –

+0

안녕하세요 ................? ...... –

+0

@Sniper. . . 당신이 말하는 것은 거의 없을 것 같습니다. 답안의 수정은'total'이 절대'NULL'이 아니도록 보장해야하며, 코드를 읽음으로써'New.Initial_Consult_Fee'가 NULL이 아닌 한이 값을'NULL'로 설정할 수있는 유일한 방법입니다. 이 경우 새 값을'coalesce (New.Initial_Consult_Fee, 0)'로 설정하십시오. –

관련 문제