Создать автопоследовательность текста и числа в оракуле 11g - PullRequest
0 голосов
/ 26 октября 2018

Как мне создать идентификатор столбца со значением JASG1?Я нахожу только такой пример:

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

1 Ответ

0 голосов
/ 26 октября 2018

Хотя то, что вы написали, вероятно, работает (если есть последовательность с именем MTJ_ID_SEQ, у вас есть право выбирать из нее; то же самое относится и к таблице TALEND_JOB), я бы сказал, что это не то, что выследует использовать.

И вот почему: я создам таблицу и последовательность.Таблица будет предварительно заполнена некоторыми идентификаторами (просто чтобы что-то туда вставить).

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

OK;Пока 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>

Видите?Только одно значение.

Кроме того, обратите внимание, что последовательности будут предоставлять уникальные значения, но вы не можете полагаться на то, что они будут без пробелов.


Как вы упомянули «как создать идентификатор столбца»- одним из вариантов является использование триггера.Вот пример:

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.

Давайте вставим несколько имен;Идентификаторы должны автоматически заполняться триггером:

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>

OK тогда;теперь у вас есть больше информации - прочитайте и подумайте об этом.

Кстати, для чего используется тег «ошибки компилятора»?Вы написали какой-либо код, и это не удалось?Возможно, вы захотите поделиться этим с нами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...