Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 带变量的序列_Oracle - Fatal编程技术网

Oracle 带变量的序列

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

在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, 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:您会注意到,我确实建议将前缀存储在单独的列中。使用基于函数的索引没有错;或者,可以在虚拟列上放置索引。