![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Начальное значение генератора [D7, IB7.5]
RomanH © (2006-08-15 16:22:00)Доброго дня мастера.Извините что отвлекаю, но для эрудиции очень хочеться узнать.Какие промышленные БД умеют задавать начальное значение генератора как в InterBase и FireBird.
Anatoly Podgoretsky (2006-08-17 16:35:00) [1]Val © (16.08.06 19:46) [22]
Спасибо, мои знания стали шире.
Val (2006-08-17 14:18:00) [2]детали вставлять, например.
Sergey13 (2006-08-17 14:18:00) [3]> [27] term1t © (17.08.06 14:16)
Любопытсва ради. 8-) Или для вставки в связанные таблицы.
term1t (2006-08-17 14:18:00) [4]>триггеры хранятся в схемах (местах дислокации пользовательских объектов), а не в базах
ну да... "Schema_name".trigger_name ... описалси...
term1t (2006-08-17 14:16:00) [5]>после такого кода, будет вопрос: "как получить значение генератора/сиквенса перед вставкой?" ;)
зачем знать это значение?
Desdechado (2006-08-17 13:42:00) [6]> "base_name".trigger_name
триггеры хранятся в схемах (местах дислокации пользовательских объектов), а не в базах
Val (2006-08-17 13:38:00) [7]>[24] term1t © (17.08.06 13:29)
после такого кода, будет вопрос: "как получить значение генератора/сиквенса перед вставкой?" ;)
term1t (2006-08-17 13:29:00) [8]
CREATE SEQUENCE Sequence_name
INCREMENT BY n
START WITH n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
CACHE n | NOCACHE
где :
INCREMENT BY n – интервал между двумя последовательными номерами; n является целым числом, приращение при генерации чисел равно 1.
START WITH n – первое генерируемое число в последовательности. . Если это предложение опущено, последовательность начинается с 1.
MAXVALUE n - максимальное значение, которое может генерировать последовательность
NOMAXVALUE - максимальное значение по умолчанию, равное 10 27.
MINVALUE n – минимальное значение последовательности.
NOMINVALUE - задает минимальное значение, равное 1.
CYCLE | NOCYCLE - продолжается ли циклическая генерация чисел после достижения максимального или минимального значения. Значение по умолчанию – NOCYCLE.
CACHE n | NOCACHE – кол-во чисел, которые сервер распределяет предварительно и хранит в памяти. По умолчанию сервер хранит в кэш-памяти 20 значений.
далее пишешь тригерок типа:
Create or replace trigger "base_name".trigger_name before insert on table_name for each row
begin
if :new.id IS NULL then
Select sequence_name.nextval into :new.id from dual
end if;
end;
Sergey13 (2006-08-17 08:18:00) [9]2 [21] Anatoly Podgoretsky © (16.08.06 19:33)
> То есть можно написать SELECT SEQUENCE и будет уникальный
> номер и как я понимаю из твоих объяснений это будет уникальный
> номер по всей базе при использование в качестве ИД в таблицах.
Сиквенс не отвечает за уникальность, тем более по всей базе. Он просто выдает следующее последовательное число. Его можно зациклить и он начнет сначала, после достижения максимального значения.
> Кстати а как он связывается с таблицей в этом качестве.
> В интербейс через триггер.
Так же и тут.
> И если в таком случае в Оракл подлинные автоинкриментные поля.
Нет.
Val (2006-08-16 19:46:00) [10]>[21] Anatoly Podgoretsky © (16.08.06 19:33)
сиквенс оракла - аналог генератора интербейза.
dual - системная табличка с одним значением одной записи для выборок-присвоений, несколько похоже, как в IB c rdb$database.
то есть, select <значение> from dual вернет 1 запись с одним значением =<значение>.
Anatoly Podgoretsky (2006-08-16 19:33:00) [11]То есть можно написать SELECT SEQUENCE и будет уникальный номер и как я понимаю из твоих объяснений это будет уникальный номер по всей базе при использование в качестве ИД в таблицах.
Кстати а как он связывается с таблицей в этом качестве. В интербейс через триггер. И если в таком случае в Оракл подлинные автоинкриментные поля.
Сообственно это просто для интереса, поскольку использовать в практике не предвидится.
Desdechado (2006-08-16 19:28:00) [12]SEQUENCE - это расширенный аналог IB-генератора.
Потому про метаданные и упомянул. Он отдельная сущность, не привязанная к таблицам и т.п.
Anatoly Podgoretsky (2006-08-16 19:19:00) [13]Desdechado © (16.08.06 11:10) [13]
Anatoly Podgoretsky © (15.08.06 19:15) [12]
SEQUENCE - это отдельный элемент метаданных, а не тип поля
Я согласен заменить термин тип поля на термин метаданные, если так легче будет.
А с вопросом SELECT у вас возникли разногласия, так что пока не ясно. И так как я не знаю Оракл, то конструкция FROM dual мне мало что говорит, но вижу я ее часто.
Это Select sequense_name.curvalмне тоже не позволяет сделать вывод.
Специалисты по Оракл скажите точно (желательно в граммах), что точно это SEQUENCE - только не перевод конечно, а сущность.
Это генератор, это метаданные, это что то другое.
Sergey13 (2006-08-16 15:11:00) [14]> [17] term1t © (16.08.06 14:57)
И чем это не ндравится?
ЗЫ: SYS. для DUAL можно не указывать.
term1t (2006-08-16 14:57:00) [15]незнаю-незнаю...
можно разве что
Select sequense_name.curval (.nextval)
from SYS.dual
Sergey13 (2006-08-16 13:59:00) [16]> [14] term1t © (16.08.06 13:38)
> нельзя
Это если упорно не читать документацию, то оно конечно.
Desdechado (2006-08-16 13:40:00) [17]> term1t © (16.08.06 13:38) [14]
можно
term1t (2006-08-16 13:38:00) [18]<quote>Если можно написать SELECT SEQUENCE</quote>
нельзя
Desdechado (2006-08-16 11:10:00) [19]Anatoly Podgoretsky © (15.08.06 19:15) [12]
SEQUENCE - это отдельный элемент метаданных, а не тип поля
Anatoly Podgoretsky (2006-08-15 19:15:00) [20]Desdechado © (15.08.06 16:44) [2]
Я не знаю SEQUENCE - тот генератор или тип, я плохо знаком с Ораклом.
Последовательности можно создавать или типом поля или генератором и триггером записывать его в поле.
Если можно написать SELECT SEQUENCE то скорее всего генератор.