2017-02-15 62 views
-4

我有一個表app和列ID, PWID auto increment。我想創建觸發器,當我插入新行(ID),然後插入PW列隨機字符串,例如75Da5A(長度爲7),請幫助創建觸發器後插入隨機字符串

ID PW 
1 75Da5A 
2 45daa8 
3 571as5 
---------- 
--------- 
+2

你有多遠?你堅持觸發語法,或生成一個隨機字符串,或兩者? (你真的以純文本存儲密碼嗎?) –

+0

是的,我現在................. –

+0

Alex Poole觸發語法我有一個查詢誰生成隨機代碼,但我需要觸發器 ** select UPPER(SUBSTR(TRANSLATE(dbms_random.string('p',100),'A'〜!@#$%^&*() - = _ + [] \ {} |;'': 「,。/ <>?','A'),1,7))FROM dual ** –

回答

0

您可能需要類似以下內容:

SQL> CREATE TABLE app (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, 
    2      pwd varchar2(16)); 

Table created. 

SQL> create or replace trigger randomPwd 
    2 before insert on app 
    3 for each row 
    4 begin 
    5  if :new.pwd is null then 
    6   :new.pwd := dbms_random.string('a', 7); 
    7  end if; 
    8 end; 
    9/

Trigger created. 

SQL> insert into app values ('', ''); 

1 row created. 

SQL> select * from app; 

     ID PWD 
---------- ---------------- 
     1 RVaQalX 

您可以使用dbms_random.string以不同方式獲取隨機字符串,而無需編輯結果。

Oracle documentation

  • 'U', 'U' - 以大寫字母字符
  • 'L' 返回字符串, 'L' - 在返回字符串小寫字母字符
  • ' a','A' - 以混合大小寫形式返回字符串
  • 'x','X' - 以大寫字母數字字符返回字符串
  • 'p','P' - 返回str以任何可打印的字符。