作者fire1017 (鳥鳴啾啾)
看板Database
標題[SQL ] Insert當下select出當筆資料
時間Sat Apr 22 19:18:35 2017
資料庫名稱:Oracle
資料庫版本:11g
內容/問題描述:
目前遇到一個問題,我想在Insert一筆資料時,
同時select出自己的PK,好讓自己能再透過程式補上BLOB資料,
(會這麼麻煩是因為我的BLOB是一張QRCode,有獨特性)
但問題在我的資料PK是透過sequence產生的,
我無法預先知道下一筆PK會是長怎樣(可能中間出狀況就跳號),
導致我再進行select時無法用insert進的PK來作為條件,
我目前想到的作法是,在table增加一個時間欄位紀錄Insert當下的時間,
再透過where最新時間的方式來取回原來那筆資料,
但想想覺得有點不夠俐落,而且不確定是否摻雜其他風險在
想請問版上的高手們是否有更好的解決辦法?
先謝謝各位解答!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.71.150
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Database/M.1492859919.A.588.html
1F:→ aaa7513231: 我以前PK都是自己生一個UUID來新增,就不需要回傳PK了 04/22 22:28
2F:→ iFEELing: 那你程式就自己取Sequence拿到號碼再塞資料進去?? 04/23 01:37
3F:推 aaa7513231: uuid只是產生一個不會重複的代碼當pk而已 04/25 17:24
樓上這個方法有點類似我另外一個嘗試的方法,
我是另外手動一個UK的代碼來當圖片的參數,
不過還是想說Oracle本身有沒有其他支援的方法~
※ 編輯: fire1017 (220.132.71.150), 04/26/2017 22:14:25
※ 編輯: fire1017 (220.132.71.150), 04/26/2017 22:20:49
4F:→ paul0407: 之前有個類似需求我是用Select ... for update來解 06/13 18:27
5F:→ paul0407: 取得最大值+1後,就是您Insert的PK值 06/13 18:30