2017-03-10 5 views
0

これは私のクレジットカードです。私は、この表では、クレジット/バランス休暇に来月挿入するために、スケジューラを使用しています残高を更新するSQLスケジューラ

creditleaveid empid creditleavemonth creditedleaves 
1    21  March    1 

DELIMITER $$ 
CREATE EVENT creditleavemonth 
ON SCHEDULE EVERY '1' MONTH 
STARTS '2017-02-01 00:00:00' 
DO 
BEGIN 
CALL spAddCreditLeaves; 
END$$ 

DELIMITER ; 

ストアドプロシージャspAddCreditLeavesある

DELIMITER $$ 

USE `attendance`$$ 

DROP PROCEDURE IF EXISTS `spAddCreditLeaves`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spAddCreditLeaves`() 
BEGIN 
INSERT INTO creditleaves(empid,creditleavemonth)SELECT empid,MONTHNAME(CURDATE())FROM empdetails; 
END$$ 

DELIMITER ; 

は今、私は記録を更新したいれます前月のすべての従業員の記録をチェックして月を挿入しました。どうやってするか?

+0

'creditleaves'テーブルに' year'フィールドがないようです。それが必要だとは思わない? –

+0

はい...私はそれを変更するつもりです。 – Prady

+0

ここで私が望むのは、次のスケジューラが実行されたときです...その時に私はその挿入されたレコードを更新したいと思います...クレジットは0なら1になり、それが1ならインクリメントされます – Prady

答えて

0

私は自分の答えを持っています。それはすごくうまくいっています。

USE `attendance`$$ 

DROP PROCEDURE IF EXISTS `spAddCreditLeaves`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spAddCreditLeaves`() 
BEGIN 
IF MONTHNAME(CURDATE())='January' 
THEN 
INSERT INTO creditleaves(empid,creditleavemonth,creditmonthyear,creditedleaves) SELECT empid,MONTHNAME(CURDATE()),YEAR(CURDATE()),creditedleaves+1 FROM creditleaves WHERE empid IN (SELECT empid FROM empdetails GROUP BY empid) AND creditedleaves IN(SELECT creditedleaves FROM creditleaves WHERE creditleavemonth=MONTHNAME((CURDATE()-INTERVAL 1 MONTH)) AND creditmonthyear=YEAR((CURDATE()-INTERVAL 1 YEAR))); 
ELSE 
INSERT INTO creditleaves(empid,creditleavemonth,creditmonthyear,creditedleaves) SELECT empid,MONTHNAME(CURDATE()),YEAR(CURDATE()),creditedleaves+1 FROM creditleaves WHERE empid IN (SELECT empid FROM empdetails GROUP BY empid) AND creditedleaves IN(SELECT creditedleaves FROM creditleaves WHERE creditleavemonth=MONTHNAME((CURDATE()-INTERVAL 1 MONTH)) AND creditmonthyear=YEAR(CURDATE())); 
END IF; 
END$$ 

DELIMITER ; 
関連する問題