我有一个名为 lp_upload 的表,它包含汽车的车牌号和其他相关信息:
CREATE TABLE `lp_upload` (
`date` date NULL ,
`plate` char(10) NULL ,
`site` int NULL ,
`dateid` char(20) NULL
)
;
此表正在从交通摄像头获取信息。但是,有时盘子中的字母无法识别,它将被替换为 $。因此,如果一个盘子确实是 abc123,但相机没有识别出 c 和 1,则进入 table 的将是 ac$23。
我想这样做,当输入一个新盘子并且其中 6 个字母与现有盘子匹配时,它将成为那个盘子。例如:输入 123$5678 并且 12345678 已经存在,那么 123$5678 将被 12345678 替换。
所以我首先写了一个匹配函数:
CREATE DEFINER = CURRENT_USER FUNCTION `matchingfun`(`str1` char(10),`str2` char(10))
RETURNS int
BEGIN
DECLARE myindex int DEFAULT 0;
DECLARE count int DEFAULT 0;
DECLARE maxlength int;
SET maxlength = length(str1);
for_loop: LOOP
SET myindex = myindex + 1;
IF maxlength < myindex then
RETURN 0;
END IF;
IF SUBSTRING(str1,myindex,1)= SUBSTRING(str2,myindex,1)then
SET count = count +1;
END IF;
IF count > 6 then
RETURN 1;
END IF;
IF SUBSTRING(str1,myindex,1)!= SUBSTRING(str2,myindex,1) and SUBSTRING(str1,myindex,1)!= '$' and SUBSTRING(str2,myindex,1)!= '$'then
RETRUN 0;
END IF;
END LOOP for_loop;
RETURN 0;
END
我在表中添加了一个触发函数
CREATE TRIGGER `trigger1` AFTER INSERT ON `lpr_opt_upload`
BEGIN
declare old_site_id int;
declare old_text char(10);
select lpr_text into old_text from lpr_opt_upload where matchingfun(new.lpr_text, lpr_text) = 1;
if(old_text is not null) then
set new.lpr_text = old_text;
end if;
END
当我运行它时,数据库崩溃。你能帮助解决这个问题或建议一个更好的方法来做到这一点。谢谢。