방아쇠와 저장 프로 시저가 있습니다. 저장 프로 시저에서 IPv4 주소의 유효성을 검사합니다. 주소가 유효하면 DB에 저장됩니다. 그렇지 않으면 내 프로그램이 DB에 빈 레코드를 저장합니다. 나는 IP가 유효하지 않을 때마다 그렇게하고 싶다. 아무 것도 저장할 필요가 없다. 나는 ip가 유효하지 않을 때 과정을 멈추는 방법을 모른다. 유효성 검사는 DB 수준에서 제공해서는 안되지만 이것이 필요하다는 것을 알고 있습니다. 제 코드 수정을 도와 주시겠습니까 ...? 감사합니다 :)트리거 또는 저장 프로 시저에서 데이터베이스에 저장하는 것을 방지하는 방법은 무엇입니까?
당신이 언급 한 것처럼DELIMITER $$
CREATE TRIGGER `validation_test_trigger` BEFORE INSERT ON setting_parameters
FOR EACH ROW
BEGIN
IF(NEW.parameter_name LIKE 'proxy_test') = true THEN
CALL validate_ip(NEW.parameter_value);
end IF;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS validate_ip;
DELIMITER //
CREATE PROCEDURE validate_ip(INOUT ip VARCHAR(45))
BEGIN
select INET_NTOA(INET_ATON(ip)) into ip;
IF(ip REGEXP '^([1-9]|[1-9][0-9]|1[013-9][0-9]|12[0-689]|2[0-4][1-9]|25[0-4])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][1-9]|25[0-4])$')=0
THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT = 'Invalid IP!';
END IF;
END //
DELIMITER ;
오라클은이를 수행 할 수있는 'INSTEAD OF'트리거를 지원합니다. mysql의 경우 blackhole 엔진 플러그인으로 속일 필요가있다. (내 대답 참조) –