我一直在尝试在PL/SQL中创建一个触发器,如果名称与数据库中已经存在的其他名称太相似,则不允许新插入,但我一直在努力创建这个触发器(在插入中,即使名称非常相似,它也不会做任何事情),有什么想法吗?
代码:
CREATE OR REPLACE TRIGGER similaridade
BEFORE INSERT ON pessoa
FOR EACH ROW
DECLARE
similaridade_c NUMBER;
BEGIN
SELECT COUNT(*) INTO similaridade_c
FROM pessoa
WHERE SIMILARITY(:NEW.nome, nome) > 0.92;
IF similaridade_c > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Esse nome já existe');
END IF;
END;
1条答案
按热度按时间sigwle7e1#
除非你有一个名为
SIMILARITY
的用户定义函数,否则这个函数不存在。您可能需要UTL_MATCH
包中的一个函数:如果你有table:
然后插入:
然后你得到错误:
fiddle
要修复插入多行时发生的可变表异常,可以改为使用
AFTER INSERT
语句级触发器:或者,您可以使用复合触发器来只检查插入行的相似性,而不是检查整个表(但这是留给读者实现的练习)。
fiddle