|
|
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Вот тут создал тему: 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. при компиляции выводится ошибка: 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. но и тут меня поджидала неудача: Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 5, column 19. . Помогите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 05:18 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
MocArt, Ну так вместо всяких вот таких выкрутасов new.id_table2 = old.id_table1; new.table2.id_table2 = old.table1.id_table1; просто INSERT into Table2... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 08:37 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
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 кончился и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 11:10 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
kdv, Прочитал http://www.ibase.ru/devinfo/generator.htm Все равно не получается, написал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 19:52 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
MocArtВсе равно не получается, написал вот так: Бред написал. Генераторы в FB работают не так как последовательности в Оракуле. Перечитывай статью и переписывай всё нафиг. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 20:04 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
MocArtkdv, Прочитал http://www.ibase.ru/devinfo/generator.htm Все равно не получается, написал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. В коде как минимум 2 синтаксические ошибки И оно тебе не ругалось при компиляции??? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 20:10 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
MocArtВсе равно не получается, написал вот так: что-то у вас с программированием туго Код: sql 1. 2. с какого бодуна тут and? вы в new.id_table1 уже получили генератор, накой фиг его вызывать еще раз, даже с 0? Вы статью прочитали? так сложно догадаться написать INSERT INTO table2 (id_table2) VALUES (new.id_table1); ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 22:22 |
|
||
|
Один и тот же ID в двух разных таблицах
|
|||
|---|---|---|---|
|
#18+
MocArtkdv, Прочитал http://www.ibase.ru/devinfo/generator.htm Все равно не получается, написал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. "аццкий адъ". Это скорее гарантирует, что связанная таблица получит ДРУГОЙ id. По событию before генерируем данные для самой таблицы, а вот для соседних надо after триггер использовать (правила хорошего тона однако). Уж все буквы назвали, а слово все никак не угадаешь. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 08:19 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=94&tid=1563554]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 497ms |

| 0 / 0 |
