powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Один и тот же ID в двух разных таблицах
8 сообщений из 8, страница 1 из 1
Один и тот же ID в двух разных таблицах
    #38652691
MocArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Вот тут создал тему: http://www.sql.ru/forum/1096930/odin-i-tot-zhe-id-v-dvuh-raznyh-tablicah
Прошу сильно не пинать, так как делетант в АйБи. Прошу объяснить, как и что нужно создать, чтобы при добавлении записи ID в таблице №1 со значением 1, создавалась такая же запись с идентичным ID в таблице №2 . Я сделал так: В первой таблице создал Генератор и Триггер с автоинкрементном +1. попытался добавить во второй таблице такое же поле: use exiting generator (выбрал генератор из таблицы №1) но при добавлении записи в первой таблице, во второй таки ничего не меняется и не появляется. что нужно поставить во второй? Заранее спасибо.

Посоветовали:
Kotъ-BegemotъНужно создать два триггера: Триггер BEFORE INSERT для первой таблицы, где проверять, если "ключевое" поле IS NULL то получать ID с помощью генератора. И триггер AFTER INSERT для первой таблицы, в котором делать вставку во вторую таблицу, используя OLD.KEYFIELD первой таблицы для занесения этого ID.

Первый триггер IBExpert может создать автоматически, надо только поставить NotNull и AutoInc для поля, и указать/создать генератор. А второй триггер написать "руками".

Вот что сделал я:
MocArtKotъ-Begemotъ,

Имеем следующую структуру таблиц:
TABLE1
ID_TABLE1 - АИ +1

TABLE2
ID_TABLE2 - integer, not null

Написал вот такой триггер №2 для первой таблицы: (триггер №1 АИ)
Имя: TABLE2_AI0
Для таблицы: TABLE1
Тип: After
Код: plsql
1.
2.
3.
4.
5.
AS
begin
    if (new.id_table2 is null) then
    new.id_table2 = old.id_table1;
end



при компиляции выводится ошибка:

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
NEW.ID_TABLE2 .
At line 5, column 13.

Очевидно, что компилятор не может понять, где эта колонка "NEW.ID_TABLE2", попытался ЯВНО указать на таблицу:
Код: plsql
1.
2.
3.
4.
5.
AS
begin
    if (new.table2.id_table2 is null) then
    new.table2.id_table2 = old.table1.id_table1;
end


но и тут меня поджидала неудача:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, column 19.
.

Помогите пожалуйста
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652713
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArt,
Ну так вместо всяких вот таких выкрутасов

new.id_table2 = old.id_table1;
new.table2.id_table2 = old.table1.id_table1;

просто INSERT into Table2...
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652890
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArt,

сверьте код с http://www.ibase.ru/devinfo/generator.htm

1. триггер с генератором должен быть не after insert, а before insert.
2. триггер на таблице 2 понятия не имеет про какие-то там столбцы других таблиц. Поэтому
даже new.table2.id_table2 - бредятина.
3. чтобы триггер на таблицу сработал, кто-то должен сделать в эту таблицу insert, update или delete. Из воздуха триггер не срабатывает.

Вы вместо фантазий лучше читайте про синтаксис триггеров и процедур. Купите что-ли книжку Борри...

insert в таблицу 1
срабатывает триггер before insert таблицы 1
берет значение из генератора, меняет пустой столбец
все столбцы можно записать в таблицу 2 через insert into table2...
триггер before insert таблицы 1 кончился

и все.
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38654996
MocArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,
Прочитал http://www.ibase.ru/devinfo/generator.htm
Все равно не получается, написал вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
as
begin
  if (new.id_table1 is null) then  
    new.id_table1 = gen_id(gen_table1_id,1) and
    INSERT INTO table2 (id_table2) VALUES (GEN_ID(gen_table1_id, 0);
 --Пытаюсь вставить текущее значение генератора, которое только что вставилось в id_table1
end
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38655006
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArtВсе равно не получается, написал вот так:
Бред написал. Генераторы в FB работают не так как последовательности в Оракуле.
Перечитывай статью и переписывай всё нафиг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38655010
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArtkdv,
Прочитал http://www.ibase.ru/devinfo/generator.htm
Все равно не получается, написал вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
as
begin
  if (new.id_table1 is null) then  
    new.id_table1 = gen_id(gen_table1_id,1) and
    INSERT INTO table2 (id_table2) VALUES (GEN_ID(gen_table1_id, 0);
 --Пытаюсь вставить текущее значение генератора, которое только что вставилось в id_table1
end



В коде как минимум 2 синтаксические ошибки
И оно тебе не ругалось при компиляции???

Код: sql
1.
2.
3.
  if (new.id_table1 is null) then  
    new.id_table1 = gen_id(gen_table1_id,1);
    INSERT INTO table2 (id_table2) VALUES (new.id_table1);

...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38655073
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArtВсе равно не получается, написал вот так:
что-то у вас с программированием туго

Код: sql
1.
2.
  new.id_table1 = gen_id(gen_table1_id,1) and
    INSERT INTO table2 (id_table2) VALUES (GEN_ID(gen_table1_id, 0);



с какого бодуна тут and?

вы в new.id_table1 уже получили генератор, накой фиг его вызывать еще раз, даже с 0? Вы статью прочитали?
так сложно догадаться написать
INSERT INTO table2 (id_table2) VALUES (new.id_table1);

?
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38655237
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArtkdv,
Прочитал http://www.ibase.ru/devinfo/generator.htm
Все равно не получается, написал вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
as
begin
  if (new.id_table1 is null) then  
    new.id_table1 = gen_id(gen_table1_id,1) and
    INSERT INTO table2 (id_table2) VALUES (GEN_ID(gen_table1_id, 0);
 --Пытаюсь вставить текущее значение генератора, которое только что вставилось в id_table1
end


"аццкий адъ".

Это скорее гарантирует, что связанная таблица получит ДРУГОЙ id.

По событию before генерируем данные для самой таблицы, а вот для соседних надо after триггер использовать (правила хорошего тона однако).

Уж все буквы назвали, а слово все никак не угадаешь. ;)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Один и тот же ID в двух разных таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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