close
在 Oracle 的世界裡沒有自動編號欄位,所以在 insert 單筆資料時,會用 select max(id) from tablename 這樣的方法來取得序號欄位的值。
今天遇到的狀況是,要把資料表 abc_company 的欄位轉進新的資料表 abc_detail 裡頭,原本打算用以下的 SQL statement 來塞資料:
insert into abc_detail
select (select max(sid) from abc_detail) as ssid, sid as company_sid,
abc_name, abc_note, created, created_user, updated, updated_user
from abc_company;
但是一直出現錯誤訊息「ORA-00001: 違反必須為唯一的限制條件 (OTCDATA.SYS_C0017858)」。
在 "INSERT using LOOP with SELECT" 這篇學到可以用 row_number() 這個 function 來製作出列號,因為我要附加在既有資料之後,所以編號我會再多加上既有的編號數:
(select max(sid) from abc_detail)
加起來就是這樣:
insert into abc_detail
select row_number() over (order by null) + (select max(sid) from abc_detail) as ssid, sid as company_sid,
abc_name, abc_note, created, created_user, updated, updated_user
from abc_company;
或者也可以使用 Oracle Sequence Object:《Oracle Sequence 物件使用》來處理遞增序號欄位。
全站熱搜
留言列表