Oracle 带变量的序列
在SQL中,我们将有一个序列。但它应该附加到这样的变量中Oracle 带变量的序列,oracle,Oracle,在SQL中,我们将有一个序列。但它应该附加到这样的变量中 M1,M2,M3,M4.... 有没有办法做到这一点?考虑将前缀存储在表中的单独一列中,例如: select 'M' || my_sequence.nextval from dual; CREATE TABLE mytable ( idprefix VARCHAR2(1) NOT NULL, id NUMBER NOT NULL, CONSTRAINT mypk PRIMARY KEY (idprefix
M1,M2,M3,M4....
有没有办法做到这一点?考虑将前缀存储在表中的单独一列中,例如:
select 'M' || my_sequence.nextval from dual;
CREATE TABLE mytable (
idprefix VARCHAR2(1) NOT NULL,
id NUMBER NOT NULL,
CONSTRAINT mypk PRIMARY KEY (idprefix, id)
);
在应用程序或视图中,可以将这些值连接在一起。或者,在11g中,您可以创建一个虚拟列来连接它们
我认为99%的几率有人会说“我们希望搜索ID 12345,而不管前缀是什么”,这种设计意味着您可以进行很好的索引查找,而不是“像“%12345”。考虑将前缀存储在表中的单独列中,例如:
CREATE TABLE mytable (
idprefix VARCHAR2(1) NOT NULL,
id NUMBER NOT NULL,
CONSTRAINT mypk PRIMARY KEY (idprefix, id)
);
在应用程序或视图中,可以将这些值连接在一起。或者,在11g中,您可以创建一个虚拟列来连接它们
我给它99%的几率,有人会说“我们想搜索ID 12345,不管前缀是什么”,这种设计意味着您可以有一个很好的索引查找,而不是“像'%12345'”.+1回答和APC注释-智能钥匙通常会被认为是一个错误的决定,因为您与设计相处了一段时间。为什么不创建一个避免前缀的功能索引呢?前缀实际上可能很有用。例如:表示重大事件之前的一行,例如从以前的系统转换而来的事件。@David:您会注意到,我确实建议将前缀存储在单独的列中。使用基于函数的索引没有错;或者,你可以在虚拟列上放置一个索引。+1回答和APC注释-智能键通常会被认为是一个错误的决定,在你与设计相处了一段时间之后。那么为什么不创建一个避免前缀的函数索引呢?前缀实际上可能很有用。例如:表示重大事件之前的一行,例如从以前的系统转换而来的事件。@David:您会注意到,我确实建议将前缀存储在单独的列中。使用基于函数的索引没有错;或者,可以在虚拟列上放置索引。