我想让我在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