1
CREATE FUNCTION TWO_FRONT(txt CHAR(30))
RETURNS CHAR(2)
RETURN SUBSTRING(txt, 1, 2);
DELIMITER $$
CREATE FUNCTION CHECK_AVABILITY(t_nama CHAR(30))
RETURNS INT(4)
BEGIN
DECLARE vreturn INT(4);
DECLARE P CHAR(8);
SET p = (SELECT MAX(id) FROM tabel_user WHERE nama like CONCAT(TWO_FRONT(t_nama),'%'));
IF ISNULL(p)THEN
SET vreturn = 0;
ELSE
SET vreturn = SUBSTRING(p, 4, 4);
END IF;
RETURN vreturn;
END $$
DELIMITER;
CREATE FUNCTION COMBINE(fn CHAR(2), nu CHAR(4))
RETURNS CHAR(7)
RETURN CONCAT(UPPER(fn),'-',nu);
CREATE TRIGGER cast_id AFTER INSERT ON tabel_user
FOR EACH ROW
BEGIN
UPDATE tabel_user SET id = COMBINE(TWO_FRONT(OLD.nama),CHECK_AVABILITY(OLD.nama)) WHERE id = OLD.id;
END;
Everyting 괜찮습니다하지만 난이를 삽입 한 후 ...MySQL의 기능 오류 1442
INSERT INTO tabel_user VALUES('','Blabla');
오류가
ERROR 1442 (HY000) ...오고있다 : 업데이트 할 수 없습니다 이 저장 함수/트리거를 호출 한 문에 의해 이미 사용 되었기 때문에 저장 함수/트리거에 'tabel_user'테이블이 있습니다.
당신은 당신의 MySQL을 혼합 메시지를 보내는 ...
은 각 행에 대해 tabel_user ON INSERT하기 전에 트리거 cast_id을 만들 시작 SET NEW.id = (TWO_FRONT (NEW.nama), CHECK_AVABILITY (NEW.nama를)) 겸용; END; 감사하지만 일부 변경 사항은 AFTER TO BEFORE –