在update触发器之前,为每个更新更新列

mrphzbgm  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(408)

我为自定义apex身份验证创建了before update触发器。当密码更新时,触发器应该在md5中转换密码,但是每次更新我都会得到新的密码,例如,我只更新用户名,我也会得到新的随机密码。

create or replace TRIGGER bu_users
  BEFORE UPDATE ON USERS
  FOR EACH ROW
BEGIN
    :NEW.username := upper(:NEW.username);

    IF :NEW.password IS NOT NULL THEN
      :NEW.password := fn_hash(:NEW.password);
    ELSE
      :NEW.password := :OLD.password;
    END IF;  
END;

fn\u哈希:

FUNCTION fn_hash (p_text IN VARCHAR2)
    RETURN VARCHAR2
  IS
    l_results VARCHAR2(4000);
  BEGIN
    SELECT standard_hash(p_text, 'MD5')
      INTO l_results
      FROM DUAL;

    RETURN l_results;
  END fn_hash;
4ioopgfo

4ioopgfo1#

请试试这个:

create or replace TRIGGER bu_users
  BEFORE UPDATE 
  ON USERS
  FOR EACH ROW

BEGIN
    :NEW.username := upper(:NEW.username);

    IF :NEW.password != :OLD.PASSWORD THEN
      :new.password := fn_hash(:NEW.password);
    ELSE
      :NEW.password := :OLD.password;
    END IF;  

END;
/

这是一个演示

相关问题