oracle 查詢並補位生成乙個編號

2021-09-02 18:15:27 字數 1359 閱讀 9834

應用場景

下發檔案會需要生成 ***單位  第 00x 號檔案  通常會根據庫裡面現有記錄數 查詢並生成乙個新的編號,如果用**查詢生成會比較麻煩,然而有了oracle函式就會方便很多:

1.  select   lpad('11', 3, '0') from dual  

結果lpad 第乙個引數表示需要處理的字串

第二個表示補齊後總長度

第三個表示補位時用什麼字元代替

比如: 

select   lpad('abc', 5, '0') from dual   

select   lpad('123', 8, 'a') from dual

使用這個函式可以解決我們的問題,然而通常建議搭配另乙個函式使用,

因為比如我們獲取這個文號最大值 ,開始可能為個位數 ,但是隨著時間增加可能到十位,百位,甚至千位,那麼  這個處理可能就不夠用,因為我們需要使用decode來動態做判斷

2. decode ,簡單介紹decode 類似於原來資料的 when  then 語句 具體不在贅述 需要詳細了解的可以自己搜,這裡簡單舉例說明

select decode(length(11),    1, lpad(1,3, '0'),     2,lpad(1,3,'0'),       'a') as maxnum from dual

第一眼看過去 好像感覺是不是好多引數 好亂不知如何下手,別急我們稍微處理一下 

這樣看起來就方便多了,我們可以吧分隔之後的 每乙個整體看做乙個語句

第乙個表示我們需要處理的條件 根據這個條件得出的結果進行判斷

後面表示 結果為1 時 返回結果,,

以此類推 ,,最後乙個 表示 前面都不滿足時輸出為.這個值

最後放乙個我們專案中用到的sql

select decode(length(maxnum), 1, lpad(maxnum,3, '0'),2,lpad(maxnum,3,'0'), maxnum) as maxnum from

(select max(event_number + 0) + 1 maxnum from orderlyevent where instr(event_date,'2018')>0 and area_code = '410102035')

select decode(length(maxnum), 1, lpad(maxnum, 3, '0'),2,lpad(maxnum,3,'0'), maxnum) as maxnum

from (select max($ + 0) + 1 maxnum from $

where instr($,$)>0 and area_code = $)

表示我們根據某個地區 某一天來查詢最大文號, 且根據查詢結果處理相應的文號    .

oracle備份乙個使用者並遷移

今天用到了將oracle中乙個使用者下的所有資訊匯入到另乙個機器中的使用者下,例如有一台機器中某使用者為aa,需要在另一台機器中將aa使用者下的所有資訊,如表 表空間 索引拷貝到本機的資料庫上 首先檢視aa使用者下的預設表空間,或者根據sysdba使用者檢視 select username,defa...

oracle聯合查詢並更新乙個表字段的sql語句

更新某乙個欄位寫起來簡單,也容易理解 update tablea a set a.name select name from tableb b where a.id b.id 更新多個欄位就顯得比較冗長 update tablea a set a.name select name from tabl...

Oracle 層次查詢的乙個妙用

往下查詢所有的節點,按節點縮排.select from organ connect byparent id prior id start with parent id isnull 其工作方式為,先找到 parent id 為 null 的記錄.再按 parent id prior id 指定的規則...