Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

insert с последующим select - неадекватное поведение в ХП   Найти похожие ветки 

 
Desdechado   (2002-09-20 10:08) [0]

Вот фрагмент хранимой процедуры.
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.
Как это объяснить и что делать, чтобы извлечь реальное значение?


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

Как объяснить? Хороший вопрос. В исходниках копаться надо.
Может быть триггер у тебя стоит на 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 везде, где надо.
Естественно, триггер придется отключить.


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

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

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

>Desdechado ©

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



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

BeforeInsert

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

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


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

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


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

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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-31821
jessis
2002-09-27 12:52
2002.10.10
Отлавливание комбинации клавиш


1-31873
crush_fm
2002-09-29 17:19
2002.10.10
PageControl


7-32036
Ученик
2002-07-30 18:04
2002.10.10
Описание NtQuerySystemInformation


1-31685
Cobalt
2002-09-27 18:55
2002.10.10
Как выйти из оператора case?


1-31892
First_May
2002-09-27 15:26
2002.10.10
Форма ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский