Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Начальное значение генератора [D7, IB7.5]


Страницы:   1 2

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 то скорее всего генератор.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо