Создание автопоследовательности текста и числа в oracle 11g

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

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

Всегда ли текст JASG одинаков для каждой строки? Если да, то то, что вы написали выше, является одним из способов сделать это. Если буквы тоже меняются, дайте нам логику последовательности.

Tim Biegeleisen 26.10.2018 05:09

да, JASG будет продолжаться и будет выглядеть следующим образом: JASG1 JASG2 JASG3 JASG4 @TimBiegeleisen

Ishak Gultom 26.10.2018 05:58

Если столбец должен содержать префикс JASG для каждой строки, то почему вы хотите сохранить его в первую очередь? Просто сохраните номер и добавьте префикс при его отображении. Или создайте представление, или виртуальный столбец, который объединяет оба

a_horse_with_no_name 26.10.2018 08:36
0
3
239
1

Ответы 1

Хотя то, что вы написали, вероятно, работает (если есть последовательность с именем 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>

Видеть? Вы получили не только одно значение 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>

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

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

хорошо, я понимаю, но когда я создаю триггер, просто появляется диалоговое окно «Ввести привязки», должно ли оно быть заполнено или нет? @Littlefoot

Ishak Gultom 26.10.2018 10:33

при создании триггера я обнаружил такую ​​ошибку: 1. Ошибка (2,3): PLS-00049: неверная привязка переменной 'NEW.ID' 2. Ошибка (2,11): PLS-00103: обнаружен символ " : "при ожидании одного из следующих:: =. (@%; индикатор Символ ": = был вставлен перед": "для продолжения. 3.Ошибка (3,1): PLS-00103: Обнаружен символ" КОНЕЦ "при ожидании одного из следующих событий:. (* @% & = - +; </> at in - это остаток по модулю, а не rem <показатель степени (**)> <> или! = или ~ => = <= <> и или подобное like2 like4 likec между || member submultiset Символ ";" был заменен на "КОНЕЦ" для продолжения. @ Littlefoot

Ishak Gultom 26.10.2018 10:41

Невозможно отладить код, который вы не видите. Пожалуйста, отредактируйте ваше исходное сообщение (вопрос) и почтовый индекс, который вы написали.

Littlefoot 26.10.2018 12:59

Извините, вчера я набрал не тот вопрос .. Я попытался создать триггер, и теперь он работает .. спасибо @Littlefoot

Ishak Gultom 29.10.2018 10:29

Другие вопросы по теме