1
我有一個Users表,每個用戶都有一個標識符,一個名稱和一些其他字段。 我需要檢查是否有插入或更新後具有相同名稱的另一個用戶,所以我做了這個觸發:檢查每個表對象是否具有不同的名稱
CREATE OR REPLACE TRIGGER user_name
BEFORE
INSERT OR UPDATE
ON Users
FOR EACH ROW
DECLARE
count INTEGER;
BEGIN
SELECT COUNT(*) INTO count FROM Users WHERE name = :new.name AND idUser <> :new.idUser;
IF count > 0
THEN raise_application_error(-20007, 'There is already another user with the same name');
END IF;
END;
似乎插入新的用戶何時工作,但是當我更新它們它不,它看起來像「忽略」idUser檢查,因此它總是失敗,因爲它找到了同名用戶。 這是怎麼回事?謝謝
爲什麼你不使用「唯一」約束? – Mat
'在用戶(名稱)上創建唯一索引uk_user_name;'解決您的所有問題 –
是的,它適用於唯一的約束/索引,但我想知道爲什麼它不以這種方式工作。 – JulioAGM