lp_upload を呼び出すテーブルがあり、車のプレート番号とその他の関連情報が含まれています。
CREATE TABLE `lp_upload` (
`date` date NULL ,
`plate` char(10) NULL ,
`site` int NULL ,
`dateid` char(20) NULL
)
;
このテーブルは交通カメラから情報を取得しています。ただし、プレート内の文字が認識されず、$ に置き換えられることがあります。したがって、プレートが実際には abc123 であるが、カメラが c と 1 を認識しなかった場合、テーブルに入力されるのは 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
これを実行すると、データベースがクラッシュします。この問題を解決するのを手伝ったり、これを行うためのより良い方法を提案したりできますか? ありがとう。