powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объясните разницу между DDL и DML. И еще кое-что :)...
11 сообщений из 36, страница 2 из 2
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430027
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван ЛевшинНапример - насколько работоспособна конструкция, описанная в моем втором ответе. Там, где If Select Max(ID) Grom Table=0 Then Set Generator ...
Вы убедились, что она неработоспособна ;)). Нельзя смешивать SQL(select ...) и DDL(SET GENERATOR...). конструкция IF возможна только в ХП, и в хранимых процедурах(которые по сути - SQL) DDL тоже нельзя использовать.

Иван ЛевшинСобственно, вопрос про системные таблицы - если можно сделать Select - почему нельзя сделать Update без условия Where? В таблице все равно только одна строка - ее он и перепишет.
В какой системной таблице одна строка, которую вы собираетесь переписать?
А системная таблица генераторов определена так:

Код: plaintext
1.
2.
3.
CREATE TABLE RDB$GENERATORS (
    RDB$GENERATOR_NAME CHAR ( 31 ) character set UNICODE_FSS,
    RDB$GENERATOR_ID SMALLINT,
    RDB$SYSTEM_FLAG SMALLINT);

и в ней ЗНАЧЕНИЙ генераторов просто-таки нет.

-----------------------------------------------------------------------------
Даже у самого плохого человека можно найти что-то хорошее, если его тщательно обыскать
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430077
ОК :) Спасибо за ответ :) Теперь ясно.
Резюмируя - я могу выставить значение генератора либо руками через любое средство администрирования, либо воспользоваться тем же pFIBQuery, где надо прописать DDL-запрос. Значение генератора - получать через Select Max()... или таким образом, как указал Могун и передавать значение как параметр в pFIBQuery. Привязывать компонент на AfterConnection. Все правильно?

Оффтоп - что есть AFAIK? Подозреваю, что из разряда RTFM :)
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430085
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аз фар аз и кноу, что переводится на наш русский "кажись"
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430089
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AFAIK - As Far As I Know
Выставить значение генератора всегда можно с помощью GEN_ID, как и говорили все до меня...
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430426
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Иван Левшин
Значение генератора - получать через Select Max() ...


Если разговор про следующее значание генератора, то так нельзя .
Надо: SELECT GEN_ID(GEN_TABLE001, 1) FROM RDB$DATABASE
Для тригера обязательная конструкция:
if (new.id is null) then new.id = GEN_ID(GEN_TABLE001, 1)
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430494
Нет, разговор не про следующее значение генератора, а только о его инициализации. Проблема в том, что я не могу изначально выставить его, например, в единичку - потому что есть пара баз, где значение ключевых полей, для которых он должен генерировать значения, уже заполнены. Мне надо генератор единожды проинициализировать - потом уже пользоваться Gen_ID(). Просто не хочется делать этого руками :).
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430495
Огромное всем спасибо за помощь :) Я получил ответы на все интересующие меня вопросы. Извините, если что не так кому показалось :). Будут еще вопросы - возникну еще раз. Еще раз всем спасибо
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32430996
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хоть тема и типа закрыта, я добавлю для будующих поколений.

Denis UskovДля тригера обязательная конструкция:
if (new.id is null) then new.id = GEN_ID(GEN_TABLE001, 1)

эта конструкция вовсе не обязательна. просто она позволяет в таблицу явным образом инсетром прописать значение уникального ключа, например, для старых записей. если по смыслу задачи этого не требуется или вредно, так делать не надо. например, если туда прописать какое-то из будущих значений, то однажды генератор сможет сам дойти до этой цифры, и черт знает что тогда будет.
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32431378
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd ... если туда прописать какое-то из будущих значений, то однажды генератор сможет сам дойти до этой цифры, и черт знает что тогда будет.


Максимум что, так это ругательство на дубликат ПК.
Я так понимаю ты сам предлагаешь контролировать значения ПК??? Так в этом случае проблем намного больше.
И конструкция
Код: plaintext
if (new.id is null) then new.id = GEN_ID(generator_name,  1 );

более гибка, чем
Код: plaintext
new.id = GEN_ID(generator_name,  1 );
и кстати, хочешь сам заполнять, пожалуйста!
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32431385
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Я так понимаю ты сам предлагаешь контролировать значения ПК???

почему это предлагаю?! наоборот, предлагаю поручить это только генератору и заменять введенное значение на сгенерированное генератором.

просто сообщил, что конструкция не "обязательная", а "более гибкая", вот!
...
Рейтинг: 0 / 0
Объясните разницу между DDL и DML. И еще кое-что :)...
    #32431402
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто мы друг друга не поняли :-)
У меня генератор заполняется в тригере только когда добавление не требует последующего Refresh'а из клиента(массовая вставка и т.д.), но значение для ПК при добавлении с Refresh'ем на клиенте ВСЕГДА берется из генератора. Вот.
Думаю тема действительно закрыта :-)
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объясните разницу между DDL и DML. И еще кое-что :)...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]