我试图在我的数据库中插入一个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;
我是所有这些数据库的新东西!请帮助!对不起我的英语顺便说一句!我知道它很糟糕!
答案 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'条款;这意味着如果该字段由insert
或update
语句设置,则该序列仅用于设置密码,这似乎不太直观;并且在更新任何内容时重置密码似乎也没有用。