在Oracle 11g中创建自动序列文本和数字

时间:2018-10-26 03:08:14

标签: sql oracle

如何创建具有值JASG1的列ID? 我只找到这样的例子:

select 'JASG'||to_char(mtj_id_seq.nextval) from talend_job 

1 个答案:

答案 0 :(得分:0)

尽管您写的内容可能行得通(如果有一个名为MTJ_ID_SEQ的序列,您可以从中选择; TALEND_JOB表也是如此),我会说它不是不是您应该使用的。

原因如下:我将创建一个表格和一个序列。表格将预先填充一些ID(只是在其中放一些东西)。

SQL> create sequence mtj_id_seq;

Sequence created.

SQL> create table talend_job as
  2    select rownum id from dept;

Table created.

SQL> select * from talend_job;

        ID
----------
         1
         2
         3
         4

好;到目前为止有4行。现在,运行您的SELECT

SQL> select 'JASG'||to_char(mtj_id_seq.nextval) from talend_job;

'JASG'||TO_CHAR(MTJ_ID_SEQ.NEXTVAL)
--------------------------------------------
JASG1
JASG2
JASG3
JASG4

SQL> select 'JASG'||to_char(mtj_id_seq.nextval) from talend_job;

'JASG'||TO_CHAR(MTJ_ID_SEQ.NEXTVAL)
--------------------------------------------
JASG5
JASG6
JASG7
JASG8

SQL>

看到了吗?您不仅得到1个JASGx值,而且得到TALEND_JOB表中的行数。如果有一百万行,那么您也将获得一百万JASGx行。

因此,也许是您打算使用DUAL表代替的?例如

SQL> select 'JASG'||to_char(mtj_id_seq.nextval) from dual;

'JASG'||TO_CHAR(MTJ_ID_SEQ.NEXTVAL)
--------------------------------------------
JASG9

SQL> select 'JASG'||to_char(mtj_id_seq.nextval) from dual;

'JASG'||TO_CHAR(MTJ_ID_SEQ.NEXTVAL)
--------------------------------------------
JASG10

SQL>

看到了吗?只有一个值。

此外,请注意,序列将提供唯一的值,但您不能依靠它们之间的完美结合。


正如您提到的“如何创建列ID”一样-一种选择是使用触发器。这是一个示例:

SQL> create table talend_job (id varchar2(20), name varchar2(20)

Table created.

SQL> create or replace trigger trg_bi_tj
  2    before insert on talend_job
  3    for each row
  4  begin
  5    :new.id := 'JASG' || mtj_id_seq.nextval;
  6  end;
  7  /

Trigger created.

让我们插入一些名称; ID应该由触发器自动填充:

SQL> insert into talend_job (name) values ('littlefoot');

1 row created.

SQL> insert into talend_job (name) values ('Ishak');

1 row created.

SQL> select * From talend_job;

ID                   NAME
-------------------- --------------------
JASG11               littlefoot
JASG12               Ishak

SQL>

然后确定;现在您有了更多信息-阅读并考虑一下。

顺便说一句,“ compiler-errors”标签是用来做什么的?您是否编写了任何代码,但失败了?也许您想与我们分享。