Oracle

使用空行的最大數量更新 Oracle DB

  • October 28, 2015

我有一個 Oracle 數據庫,我需要更新一些列,其中一個是必須是某種 id - 該列上的最大數字的數字。如果我使用這樣的東西:

update ss_chest ssc
   set SSC.NUMAR_CHEST = 'RO' || (select lpad(max(SSC.NUMAR_CHEST),5,'0')
                                  from ss_chest ssc where SSC.NUMAR_CHEST is not null)
where SSC.NUMAR_CHEST is null;

結果總是一樣的,它用相同的最大 NUMAR_CHEST 更新我的表。如何始終使用最大數量更新它?(我必須將我的號碼與前面的 RO 並在 5 個空格上以 0 開頭)謝謝!

這是一次性更新,還是您計劃在插入後執行該查詢,其中插入語句未設置 SSC.NUMAR_CHEST?如果您想要升序數字,聽起來您需要使用 Oracle 序列;您的子查詢(select lpad(... 將返回查詢開始時的最大值。

要使用序列,請創建一次(使用SEQ_CHEST下面範例中的名稱),然後在更新中引用它;每次訪問時,SEQ_CHEST.nextval您都會獲得一個唯一編號:

create sequence SEQ_CHEST maxvalue 99999;  -- one time deal

update ss_chest ssc
  set SSC.NUMAR_CHEST = 'RO' || lpad(SEQ_CHEST.nextval,5,'0')
  where SSC.NUMAR_CHEST is null;

你的插入語句就像

insert into ss_chest values('A', 'B', ... 'RO' || lpad(SEQ_CHEST.nextval,5,'0'));

引用自:https://dba.stackexchange.com/questions/119390