我想讓我在oracle中的表的主鍵以字母開頭。主鍵是一個nvharchar。可能的主鍵可能是:S1,S291912873123,S123123123。我怎樣才能做到這一點?觸發?任何示例?oracle主鍵以字母開頭
2
A
回答
6
您是否總是希望在生成的主鍵上加上'S'?還是有一些額外的算法來找出使用什麼字母?或者你想讓這封信隨着時間的推移而增加?
如果你只是前面加上「S」,你可以不喜歡
CREATE SEQUENCE your_pk_seq;
CREATE TRIGGER trg_populate_pk
BEFORE INSERT ON your_table_name
FOR EACH ROW
BEGIN
SELECT 'S' || to_char(your_pk_seq.nextval)
INTO :new.primary_key_column
FROM dual;
END;
我通常會告誡但是這樣做。如果您正在生成合成主鍵,則不應該關心格式。無論您是功能上的數字,GUID還是其他內容,都無關緊要。而且由於Oracle提供序列以便高效地生成數字合成密鑰,所以您應該讓您的合成主鍵爲數字。如果'S'編碼了一些其他信息,那麼它確實應該存儲在一個單獨的列中(爲了顯示的目的,您總是可以連接到主鍵)。
0
您可以簡單地插入您希望用作PK的值。
INSERT INTO MYTABLE (PK) values ('S291912873123')
7
我同意賈斯汀洞穴。 優化程序和索引分佈也有副作用。這些可以通過使用具有前導零的固定長度格式(即S0000913,S0000914,S0000915而不是S913,S914,S915)來最小化。
當索引塊爲「滿」並且需要被分割以添加密鑰時,那麼如果該塊位於索引的右側大小,則會得到90/10的分割。否則它會得到50-50分。如果你有很多按鍵像S9,S90,S91,S92 ... S904 ...,那麼你可以使用S6034或其他東西,你會得到50-50的分割(因爲你已經得到了所有S9條目)右側)。
同樣,當面對的範圍內掃描「S6034」「S6」和「S7」之間的配合,雖然6034不適合6和7之間
瞭解這個三思。另一種解決方案可能是將'S'組件作爲一個單獨的字段,該字段既可以是兩列主鍵的一部分,也可以是不屬於該鍵的屬性。
相關問題
- 1. 搜索以字母開頭
- 2. 過濾器數據不以oracle中的字母列表開頭
- 3. 以字母開頭的粗體字
- 4. RegEx以字母或數字開頭0
- 5. Python:以任何字母開頭
- 6. 將IDENTITY設置爲以字母開頭
- 7. 範圍滑塊以字母開頭
- 8. 以字母開頭的返回值
- 9. Fetch帖子以字母開頭[x]
- 10. 單詞不以字母開頭
- 11. 以字母/ _開頭的字符串和(可能)以下字母/數字/ _
- 12. 按歌手名字開頭的iTunes歌曲數量以字母開頭
- 13. preg_match字符串必須以字母字符開頭
- 14. PostgreSQL正則表達式檢查以拉丁字母和字母字符開頭
- 15. Javamail不會發送主題以字母'n'或'N'開頭的郵件
- 16. 增量字母數字主鍵
- 17. 如何使textField的第一個字符只以字母開頭?
- 18. Lucene搜索字段必須以某些字母開頭
- 19. 以給定字母/數字開頭的向量中的元素
- 20. MySQL選擇名字以姓氏開頭的某個字母
- 21. Linq to EF搜索不以字母開頭的字符串
- 22. Restful Web服務Json字段以大寫字母開頭
- 23. 從字符串中提取以字母開頭的單詞
- 24. 確定字符串是否以字母A到I開頭
- 25. mongoquery搜索字符串以特定字母開頭
- 26. 獲取在linq中不以字母字符開頭的記錄
- 27. PL/SQL:字符串regexp_like不以字母開頭
- 28. 檢查字符串是否以Ruby中的X字母開頭
- 29. 如何查詢字段何時不以字母開頭?
- 30. 檢查字符串是否以小寫字母開頭
我希望它是自動生成的主鍵...所以我不想每次進入表格時都要這樣做 – aherlambang 2010-11-11 20:38:51
我認爲您需要更好地解釋要求。做你所要求的是增加不必要的開銷。你爲什麼需要PK開始寫信? – RedFilter 2010-11-11 20:45:40
可以說我有一個工作人員和一個客戶,從前端我希望用戶能夠通過他們的ID關聯一個工作人員和一個客戶 – aherlambang 2010-11-12 17:07:06