如何创建具有值JASG1
的列ID?
我只找到这样的例子:
select 'JASG'||to_char(mtj_id_seq.nextval) from talend_job
答案 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”标签是用来做什么的?您是否编写了任何代码,但失败了?也许您想与我们分享。