Генерация ID

tetroid
Дата: 05.11.2008 09:35:43
Помогите создать идентификатор каждой новой записи чтобы формат был не только числовой. На данный момент у меня получилось только генерить каждую запись под номером от 2 до 999999999999999 соответственно.

-- Create trigger TRG_TEST
create or replace trigger TRG_TEST
before insert on test
for each row
declare
-- local variables here
begin
SELECT sq_test.nextval
INTO :new.id
FROM dual;
end TRG_TEST;

-- Create sequence
create sequence SQ_TEST
minvalue 1
maxvalue 999999999999999
start with 2
increment by 1
cache 20;

Как преобразовать чтобы идентификатор задавался случайным неповторяющимся образом, в формате число/буква, определенной длинны?
Заятс
Дата: 05.11.2008 10:06:18
Наиболее правильное решение - значение, генериреемое sequence, преобразовывать в N-ичное чиcло, (N>10). При необходимости - дополнять каким-либо символом до нужной длины
Добрый Э - Эх
Дата: 05.11.2008 10:40:40
tetroid
Помогите создать идентификатор каждой новой записи чтобы формат был не только числовой.
Может чем поможет: тынц
tetroid
Дата: 10.11.2008 21:38:20
Спасибо большое, помогло. Только ещё возник маленький нюансик. Сам тригер:
create or replace trigger TRG_COUNT
before insert on tab1
for each row
declare
-- local variables here
begin
UPDATE tab1 set count = dbms_random.string('p',3)||'-'||dbms_random.string('a',3)||'-'||dbms_random.string('a',3);
end TRG_COUNT;
При его работе последняя запись таблицы с которой происходит работа не получает генерируемого значения xxx-xxx-xxx. Подскажите в чем дело?
Alexander Konakov
Дата: 10.11.2008 21:40:27
tetroid

При его работе последняя запись таблицы с которой происходит работа не получает генерируемого значения xxx-xxx-xxx. Подскажите в чем дело?

Потому что это триггер BEFORE insert for each row.
tetroid
Дата: 10.11.2008 21:50:12
А как видоизменить его чтобы он записывал всё как надо, не заменой же before на after.
Alexander Konakov
Дата: 10.11.2008 22:05:52
tetroid
А как видоизменить его чтобы он записывал всё как надо, не заменой же before на after.

Не заменой - это точно, ибо будет мутирующая таблица.
А это ничего, что в Вашем случае всем записям (кроме последней) проставляется новое значение count? Может, отсюда начать?
tetroid
Дата: 10.11.2008 22:14:39
Значение и должно быть новым генерируемым, увеличение числового значение счетчика для каждой записи мне ненадо. Генерируемый формат число/буква в count-e для каждой записи, вот чего бы хотелось :(
Alexander Konakov
Дата: 10.11.2008 23:32:07
tetroid
Значение и должно быть новым генерируемым, увеличение числового значение счетчика для каждой записи мне ненадо. Генерируемый формат число/буква в count-e для каждой записи, вот чего бы хотелось :(

Чем не нравится BEFORE INSERT ON table_name FOR EACH ROW триггер с телом в виде
:new.id := dbms_random.string('p',3)||'-'||dbms_random.string('a',3)||'-'||dbms_random.string('a',3);

?