oracle 跟據字首規則生成編碼解決方法

self_control發表於2015-01-16
    先說需求。
    人員屬於組織機構,組織機構為11位字串程式碼,人員程式碼需要在新增人員時後臺生成。
    生成規則  人員程式碼 = 組織機構程式碼前7位+ 4位的數字。
    要求:1、生成的程式碼不可以重複(廢話)
            2、可以找到最小的未使用的程式碼。如 跟據字首【2130102】 
                  表中資料目前只有【2130102】【0002】 那應該得到【2130102】【0001
                  如果表中資料有 【2130102】【0001【2130102】【0002】 那應該得到 【2130102】【0003

    需求說明白了,直接上解決方法,一個sql語句搞定問題。

    

點選(此處)摺疊或開啟

  1. select '2130102' /*P_PREFIX*/||lpad(min(t.seq),4,'0')
  2. from (select rownum seq from dual connect by level <10000)t
  3. where t.seq not in (select to_number(jbgm,8,4))
  4. from t_pt_qx_zzjg t
  5. where t.jgbm like '2130102%'/*P_PREFIX*/

下面嘮叨下關於這個語句效能相關的東西。
1、使用到 select rownum seq from dual connect by level  < 10000 來構造虛擬表,生成的表會放在記憶體中,所以數量不應太大 。一般來說10000的數量基本可以滿足所有的需求了。
2、connect by level 3、一定要在將要生成編碼的欄位上建立索引,不然嚴重影響效率。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30066956/viewspace-1403733/,如需轉載,請註明出處,否則將追究法律責任。

相關文章