Последовательность триггеров Oracle и клавиатура

im пытается вставить в мой db пароль с четырьмя символами. Он генерируется последовательностью... проблема с им заключается в том, что я не могу найти способ сделать это. Я просто узнаю о триггерах, я знаю, что ответ на мою проблему может быть там, и это то, что у меня есть до сих пор: 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;

Im новый со всеми этими материалами базы данных! PLZ помочь! и извините за мой английский btw! я знаю его ужасно!

1 ответ

Нечетные правила пароля, поскольку относительно легко угадать нового пользователя... но вы можете это сделать:

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

Или из 11 г:

: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, что не кажется очень интуитивным; и сброс пароля при обновлении чего-либо кажется бесполезным тоже.

licensed under cc by-sa 3.0 with attribution.