powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Один и тот же ID в двух разных таблицах
7 сообщений из 7, страница 1 из 1
Один и тот же ID в двух разных таблицах
    #38652510
MocArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Прошу сильно не пинать, так как делетант в АйБи. Прошу объяснить, как и что нужно создать, чтобы при добавлении записи ID в таблице №1 со значением 1, создавалась такая же запись с идентичным ID в таблице №2 . Я сделал так: В первой таблице создал Генератор и Триггер с автоинкрементном +1. попытался добавить во второй таблице такое же поле: use exiting generator (выбрал генератор из таблицы №1) но при добавлении записи в первой таблице, во второй таки ничего не меняется и не появляется. что нужно поставить во второй? Заранее спасибо.
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652527
Kotъ-Begemotъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно создать два триггера: Триггер BEFORE INSERT для первой таблицы, где проверять, если "ключевое" поле IS NULL то получать ID с помощью генератора. И триггер AFTER INSERT для первой таблицы, в котором делать вставку во вторую таблицу, используя OLD.KEYFIELD первой таблицы для занесения этого ID.

Первый триггер IBExpert может создать автоматически, надо только поставить NotNull и AutoInc для поля, и указать/создать генератор. А второй триггер написать "руками".
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652687
MocArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kotъ-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 в двух разных таблицах
    #38652757
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArt, не следует темы дублировать в разных форумах, тем более тут не в тему. В IB/Firebird-разделе уже создал ведь обсуждение...
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652783
Kotъ-Begemotъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MocArt, в триггере на таблицу SOMETABLE с помощью префиксов OLD и NEW можно ссылаться только на поля ЭТОЙ же самой таблицы.
IBExpert сам генерит триггер на BI который берёт значение "автоинкрементного" поля из генератора.
А "руками" написать надо что-то типа этого (триггер на BI для TABLE1)

Код: sql
1.
INSERT INTO TABLE2(ID, ...., ....) VALUES (NEW.ID, ...., ....)
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652786
Kotъ-Begemotъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, на After Insert, вот так:

А "руками" написать надо что-то типа этого (триггер на AI для TABLE1)
...
Рейтинг: 0 / 0
Один и тот же ID в двух разных таблицах
    #38652799
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, в чем загвоздка, вроде все просто.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
/******************************************************************************/
/***               Generated by IBExpert 27.05.2014 10:06:38                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/


CREATE GENERATOR GEN_SOMETABLE1_ID;

CREATE TABLE SOMETABLE1 (
    ID        ID NOT NULL /* ID = BIGINT NOT NULL */,
    SOMEDATA  CALENDARITEM /* CALENDARITEM = SMALLINT NOT NULL */
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE SOMETABLE1 ADD CONSTRAINT PK_SOMETABLE1 PRIMARY KEY (ID);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: SOMETABLE1_AI0 */
CREATE OR ALTER TRIGGER SOMETABLE1_AI0 FOR SOMETABLE1
ACTIVE AFTER INSERT POSITION 0
AS
begin
  insert into sometable2 (id) values (new.id);
end
^


/* Trigger: SOMETABLE1_BI */
CREATE OR ALTER TRIGGER SOMETABLE1_BI FOR SOMETABLE1
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_sometable1_id,1);
end
^

CREATE TABLE SOMETABLE2 (
    ID  ID NOT NULL /* ID = BIGINT NOT NULL */
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE SOMETABLE2 ADD CONSTRAINT PK_SOMETABLE2 PRIMARY KEY (ID);


SET TERM ; ^

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


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