如何使用日期和序列号创建字母数字序列
How to create alphanumeric sequence using date and sequence number
我想在 oracle 中创建一个字母数字序列。 Table 名称是 rel_details
它由四列组成。
rel_id
rel_name
rel_modified_date
rel_desc
在 rel_id
中,我想生成像 REL230420151001
这样的 ID
REL
是一个字符串,
23042015
是今天的日期,
1001
是一个起始数字。
如何创建此类型序列。
如果我是你,我不会费心将这样的序列存储在列中;我会单独存储包含相关信息的列,然后有一个虚拟列将它们连接在一起,或者在视图中进行连接。
如果您使用 12c,那么这是使用 IDENTITY column 和 VIRTUAL 列的一种方法.
identity column是12c版本引入的,virtual column是11g版本引入的
SQL> CREATE TABLE t
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY
4 START WITH 1000 INCREMENT BY 1,
5 text VARCHAR2(50),
6 dt DATE DEFAULT SYSDATE,
7 my_text varchar2(1000) GENERATED ALWAYS AS (text||to_char(dt, 'DDMMYYYY')||ID) VIRTUAL
8 );
Table created.
SQL>
SQL> INSERT INTO t(text) VALUES ('REL');
1 row created.
SQL>
SQL> SELECT text, my_text FROM t;
TEXT MY_TEXT
----- ------------------------------
REL REL230420151000
SQL>
我创建了以 1000 开头的标识列,您可以自定义您想要的方式。
关于 VIRTUAL 列有一个小技巧。您必须明确地将其转换为具有固定大小的 varchar2,否则隐式转换将使其达到 最大大小。有关详细信息,请参阅此
检查这个,您可能无法创建序列,但您可以使用 select,如下所示。
创建序列 mysec
最小值 0
从 10001 开始
递增 1
无缓存;
select 'REL'||to_char(sysdate,'DDMMYYYY')||mysec.nextval 来自 dual;
我想在 oracle 中创建一个字母数字序列。 Table 名称是 rel_details
它由四列组成。
rel_id
rel_name
rel_modified_date
rel_desc
在 rel_id
中,我想生成像 REL230420151001
REL
是一个字符串,
23042015
是今天的日期,
1001
是一个起始数字。
如何创建此类型序列。
如果我是你,我不会费心将这样的序列存储在列中;我会单独存储包含相关信息的列,然后有一个虚拟列将它们连接在一起,或者在视图中进行连接。
如果您使用 12c,那么这是使用 IDENTITY column 和 VIRTUAL 列的一种方法.
identity column是12c版本引入的,virtual column是11g版本引入的
SQL> CREATE TABLE t
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY
4 START WITH 1000 INCREMENT BY 1,
5 text VARCHAR2(50),
6 dt DATE DEFAULT SYSDATE,
7 my_text varchar2(1000) GENERATED ALWAYS AS (text||to_char(dt, 'DDMMYYYY')||ID) VIRTUAL
8 );
Table created.
SQL>
SQL> INSERT INTO t(text) VALUES ('REL');
1 row created.
SQL>
SQL> SELECT text, my_text FROM t;
TEXT MY_TEXT
----- ------------------------------
REL REL230420151000
SQL>
我创建了以 1000 开头的标识列,您可以自定义您想要的方式。
关于 VIRTUAL 列有一个小技巧。您必须明确地将其转换为具有固定大小的 varchar2,否则隐式转换将使其达到 最大大小。有关详细信息,请参阅此
检查这个,您可能无法创建序列,但您可以使用 select,如下所示。
创建序列 mysec 最小值 0 从 10001 开始 递增 1 无缓存;
select 'REL'||to_char(sysdate,'DDMMYYYY')||mysec.nextval 来自 dual;