Triggers PLSQL触发器相等性检查

Triggers PLSQL触发器相等性检查,triggers,Triggers,我需要一个触发器,用于我在大学的项目,该项目在插入表之前检查是否相等。这意味着在表Customer上有一个名为username的变量,在插入新用户名之前,它应该检查用户名是否存在。我不知道该怎么做 创建或替换触发器BENUTZERNAME CREATE OR REPLACE TRIGGER BENUTZERNAME BEFORE INSERT ON KUNDE. FOR EACH ROW DECLARE Benutzername KUNDE.Benutzername; BEGIN i

我需要一个触发器,用于我在大学的项目,该项目在插入表之前检查是否相等。这意味着在表Customer上有一个名为username的变量,在插入新用户名之前,它应该检查用户名是否存在。我不知道该怎么做

创建或替换触发器BENUTZERNAME
CREATE OR REPLACE TRIGGER BENUTZERNAME
BEFORE INSERT ON KUNDE. 
FOR EACH ROW
DECLARE 
    Benutzername KUNDE.Benutzername;
BEGIN
if (:new.Benutzername <> :old.Benutzername)
    Then RAISE_APPLICATION_ERROR(-20000,"Existiert bereits");
else 

*keep inserting the new name* 

  NULL;
END;
在插入KUNDE之前。 每行 声明 Benutzername KUNDE.Benutzername; 开始 如果(:new.Benutzername:old.Benutzername) 然后引发应用程序错误(-20000,“Existiert bereits”); 其他的 *继续插入新名称* 无效的 结束;
这将暂时起作用

create or replace
TRIGGER BENUTZERNAME
BEFORE INSERT ON KUNDE
FOR EACH ROW
DECLARE 
counter number(10):=0;
BEGIN
select count(1) into counter from KUNDE where userid = :new.Benutzername;
if (counter >0)
Then RAISE_APPLICATION_ERROR(-20000,'Existiert bereits');
end if;
END;

触发器是一种不好的方法。请改用Unique constraint。

是否使用oracle db?如果是这样,请在插入之前尝试使用
EXISTS
条件。仅对我们的项目使用普通db。我认为应该是这样的:在KUNDE上插入之前创建或替换触发器BENUTZERNAME。对于每一行,声明Benutzername KUNDE.Benutzername;如果(:new.Benutzername:old.Benutzername)开始,则引发应用程序错误(-20000,“Existiert bereits”);否则继续插入新名称NULL;结束;因此,如果新用户名等于表中的一个用户名,则应导致应用程序错误,否则应继续插入