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

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

insert с последующим select - неадекватное поведение в ХП [D5, FB 1.0.0.796]


Desdechado ©   (2002-09-20 10:08:00) 

Вот фрагмент хранимой процедуры.
INSERT INTO ObjNames ( type_id, obj_name, obj_comment, parent_id, access_id )
VALUES ( :nTask, :cText, " ", :nNode, :nAccessID );
SELECT obj_id FROM ObjNames
WHERE obj_name = :cText AND type_id = :nTask AND
parent_id = :nNode AND access_id = :nAccessID
INTO :OBJ_ID;
INSERT INTO TreeLinx ( node_id, obj_id, is_branch )
VALUES ( :OBJ_ID, :nLinkObj, :lBranch );

Поле obj_id в таблице ObjNames заполняется триггером из генератора. Первый INSERT проходит нормально, никаких исключений не происходит. НО: select, выполняемый сразу поcле insert, дает NULL. Соответственно, второй INSERT вставляет этот NULL.
Как это объяснить и что делать, чтобы извлечь реальное значение?


Desdechado   (2002-09-20 13:38:00) [1]

2 Johnmen © (20.09.02 11:14)
> Вероятно, проблема в триггере, а не в ХП.
Спасибо. Натолкнул на мысль. У меня 3 триггера на эту таблицу, а в одном (писан давно, забыл) подменялось access_id на другое, поэтому по условию ничего потом не отбиралось.

2 All
Извините, что вылез с таким вопросом - глюкавость оказалась во мне :)


Johnmen   (2002-09-20 11:14:00) [2]

Вероятно, проблема в триггере, а не в ХП.
Могу лишь поделиться печалями...
В свое время под FB в базе перестал адекватно работать именно триггер ! Проблему исследовал досконально, насколько смог...
И пришел для себя к выводу - глюкавость ! И скорее всего, глюк в FB.


Desdechado   (2002-09-20 11:00:00) [3]

BeforeInsert

Но есть еще один прикол. В другой ХП аналогичная конструкция работает без проблем.

2 Prooksius © (20.09.02 10:28)
> триггер придется отключить
меня это не устраивает


Johnmen   (2002-09-20 10:39:00) [4]

>Prooksius © (20.09.02 10:28)
>хотя большой разницы, IMHO, нет... :-/

Неужели ?.......
Разница есть, и она принципиальная....

>Desdechado ©

Так какой триггер заполняет obj_id ?


Prooksius   (2002-09-20 10:28:00) [5]

Как объяснить? Хороший вопрос. В исходниках копаться надо.
Может быть триггер у тебя стоит на AfterInsert, а не на BeforeInsert..., хотя большой разницы, IMHO, нет... :-/
IB вообще хитрая штука.

Я бы посоветовал сделать так (я думаю, ты и сам знаешь :-)

1) select gen_id(generator) from RDB$Database into :obj_id

2) INSERT INTO ObjNames ( obj_id, type_id, obj_name, obj_comment, parent_id, access_id )
VALUES (:obj_id, :nTask, :cText, " ", :nNode, :nAccessID );

...
дальше используешь :obj_id везде, где надо.
Естественно, триггер придется отключить.


Наверх

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