Oracle触发序列和lpad

时间:2014-03-26 18:43:07

标签: oracle triggers sequence

我试图在我的数据库中插入一个4字符的密码。它是由一个序列产生的...我遇到的问题是我无法找到一种方法来实现这一目标。我只是发现触发器,我知道我的问题的答案可能就在那里,这就是我现在所拥有的:S

CREATE OR REPLACE TRIGGER TRG_PASSWORD 
BEFORE INSERT OR UPDATE OF PASSWORD ON USER
FOR EACH ROW

BEGIN
     SELECT SEQ_PASSWORD.NEXTVAL
     INTO new.PASSWORD := LPAD(:new.PASSWORD,4,'0');
     FROM DUAL;
END;

我是所有这些数据库的新东西!请帮助!对不起我的英语顺便说一句!我知道它很糟糕!

1 个答案:

答案 0 :(得分:2)

奇怪的密码规则因为猜测新用户相对容易......但你可以这样做:

 SELECT LPAD(SEQ_PASSWORD.NEXTVAL, 4, '0')
 INTO :new.PASSWORD
 FROM DUAL;

或者从11g:

:new.PASSWORD := LPAD(SEQ_PASSWORD.NEXTVAL, 4, '0');

作为LPAD的替代方案,您还可以使用TO_CHAR

:new.PASSWORD := TO_CHAR(SEQ_PASSWORD.NEXTVAL, 'FM0000');

当然,所有这些都假定您的USER.PASSWORD字段定义为varchar2,而不是number

你可能不想要'OF PASSWORD'条款;这意味着如果该字段由insertupdate语句设置,则该序列仅用于设置密码,这似乎不太直观;并且在更新任何内容时重置密码似乎也没有用。