2017-01-17 3 views
0

Я пытаюсь загрузить таблицу, где у меня есть столбец PK с именем E_id. Я хочу генерировать уникальный идентификатор для этого столбца каждый раз, когда строка загружается в эту таблицу на информационном уровне. Но я хочу, чтобы этот столбец e_id генерировал уникальное значение на уровне таблицы. Могу ли я достичь этого, написав запрос к этому столбцу в таблице, создав сам сценарий? В настоящее время я попробовал этот метод недобросовестного значение с этимУникальная последовательность для столбца в таблице оракула

e_id NUMBER DEFAULT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF9')) NOT NULL 

Хотя иногда я получаю такое же значение для двух записей. Может кто-нибудь помочь, как это сделать?

TIA.

+0

Почему бы не просто использовать колонку автоматического увеличения? –

ответ

1

один из наиболее распространенных способов сделать это с помощью последовательности

1 создают последовательность

2 Перед вставкой строки триггера, который будет заполнять значение в столбец pk

create sequence GSEQUENCE 
minvalue 1000 
maxvalue 99999999999999999 
start with 93581 
increment by 1 
cache 20; 


CREATE OR REPLACE TRIGGER BI_DOCUMENTS 
    BEFORE INSERT 
    on DOCUMENTS 

    for each row 
declare numrows INTEGER; 
begin 


select gsequence.nextval 
into :new.id_DOCUMENT 
from dual; 

end; 
/
+0

Большое спасибо. Это помогло! – gbppa

1

Если вы используете 12c, самый простой способ - использовать столбец IDENTITY. Oracle будет автоматически генерировать уникальное значение для столбца всякий раз, когда вы вставляете запись.

В предыдущих версиях вы можете определить последовательность и сгенерировать ее с помощью триггера или ссылаться на нее непосредственно в инструкции insert.

Вы упоминаете Informatica. Его долгое время с тех пор, как я его использовал, но, похоже, я помню, что существует простой способ генерации уникального идентификатора с помощью Informatica.

+0

Да, но ограничение здесь - я не могу использовать informatica для загрузки уникальных значений для этих столбцов, иначе я бы без труда использовал преобразование генератора последовательности. Это мое ограничение здесь. Мне нужно найти способ заполнить этот столбец на уровне сценария таблицы. – gbppa

+0

Если это должно быть чисто на уровне сценария стола, тогда вам нужно быть на 12c, иначе это звучит, как триггер - это путь. – BriteSponge

0

Вы можете использовать глобально уникальный идентификатор (GUID), который является уникальным для всех практических целей. Многие системы используют GUID для генерации уникального идентификатора.

select sys_guid() from dual 

Частица в here

Хотя GUID дает действительно случайные уникальные идентификаторы, вы всегда можете использовать последовательность Oracle, если вам нужны последовательные уникальные значения.

У Oracle нет столбцов «auto increment», но вы можете достичь аналогичных результатов с помощью триггера.

EDIT: Вы можете обратиться по этой ссылке тоже How to generate a GUID in Oracle?

Смежные вопросы