我想在oracle中创建一个字母数字序列。表名为rel_details
,由四列组成。
rel_id
rel_name
rel_modified_date
rel_desc
在rel_id
我希望生成ID REL230420151001
REL
是一个字符串,
23042015
是今天的日期,
1001
是起始编号。
如何创建此类型序列。
答案 0 :(得分:1)
如果您使用的是 12c ,则可以使用 IDENTITY column 和 VIRTUAL列进行此操作。
标识列在版本12c中引入,虚拟列在版本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 ,否则隐式转换将使其达到最大大小。有关详细信息Concatenating numbers in virtual column expression throws ORA-12899: value too large for column
,请参阅此处答案 1 :(得分:0)
如果我是你,我不会在列中存储这样的序列;我将分别存储包含相关信息的列,然后将一个虚拟列连接在一起,或者在视图中进行连接。
答案 2 :(得分:0)
选中此项,您可能无法创建seq,但您可以使用以下选项。
创建序列mysec minvalue 0 从10001开始 增加1 非缓存;
从双重选择'REL'|| to_char(sysdate,'DDMMYYYY')|| mysec.nextval;