![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимые Процедуры разных типов [D7, Firebird 2.0]
Megabyte © (2006-10-11 11:24:00)У меня хп является одновременно процедурой действия и выбора. Возможно ли использовать такую процедуру или обязательно надо разбивать ее на 2: действия и селективную? Ведь выполняются они по-разному.
Просто запускаю процедуру черезselect * from my_sp(:param)и через методы IBQuery close, open, тогда не выполняются действия.
Если использую метод execSQL, то ругается, что требуется открыть датасет.
Код процедуры правильный, т.к. сделал отдельно процедуру действия и проверял в IBExpert'е, также проверял селективную часть.
Megabyte (2006-10-12 12:51:00) [1]
> Desdechado © (11.10.06 15:47) [6]
(мысли вслух)
как обычно, ни код ХП, ни код вызова не прилагается
ну, гоняй своих тараканов дальше...
Какие тараканы, все работает, только сделал по-другому. ;)
Если бы я хотел разобраться, то написал бы код. Мне был интересен только один вопрос, ответ я получил!
atruhin (2006-10-12 04:59:00) [2]Суть моих высказываний сводится к тому, что в Firebird нельзя сделать Commit внутри процедуры, на ряде других серверов можно. Из этого следует остальное :)
Zacho (2006-10-12 02:59:00) [3]atruhin © (12.10.06 2:39) [11]
Похоже мы друг друга не совсем понимаем.
Ну да ладно, всё равно к исходному вопросу это мало относится. :)
atruhin (2006-10-12 02:39:00) [4]> Нужно или не нужно завершать транзакцию после вызова процедуры
> зависит исключительно от логики работы приложения
Об этом я и говорю, что результат выполнения процедуры зависит и от логики приложения, а не только от логики процедуры. В других серверах это не так.
Zacho (2006-10-11 19:27:00) [5]atruhin © (11.10.06 18:29) [9]
то после вызова процедуры изменяющей данные необходимо сделать commit, а после читающей не нужно
Это, мягко говоря, не совсем так. Нужно или не нужно завершать транзакцию после вызова процедуры зависит исключительно от логики работы приложения, а не от того, изменяет процедура какие-либо данные или нет.
Другое дело, что пишущие транзакции имеет смысл делать максимально возможно короткими, а читающие read commited могут быть и "длительными" без неприятных побочных эффектов. Именно из этого, кстати, следует практика работы с двумя транзакциями - читающей и пишущей.
atruhin (2006-10-11 18:29:00) [6]В Firebird есть ньюанс: так как работа обычно осуществляется в режиме 2 транзакций читающей и пишущей + внутри процедуры нельзя сделать commit, то после вызова процедуры изменяющей данные необходимо сделать commit, а после читающей не нужно. Т.е.
> А что там внутрях себя эта самая ХП "добавляет-изменяет-
> удаляет" - это ее унутреннее дело.
это не совсем ее дело! Программисту приходится учитывать изменяет ли она данные.
MsGuns (2006-10-11 17:38:00) [7]С т.зр. "клиента" есть 2 типа ХП: возвращающие НД и не возвращающие. А что там внутрях себя эта самая ХП "добавляет-изменяет-удаляет" - это ее унутреннее дело.
Сергей М. (2006-10-11 17:21:00) [8]
> У меня хп является одновременно процедурой действия и выбора
> Код процедуры правильный, т.к. сделал отдельно процедуру
> действия
ПлакалЪ..
Desdechado (2006-10-11 15:47:00) [9](мысли вслух)
как обычно, ни код ХП, ни код вызова не прилагается
ну, гоняй своих тараканов дальше...
atruhin (2006-10-11 14:44:00) [10]> но мне проще и быстрее не искать баг, а разделить хп. :)
Но от простого разделения баг то никуда не ущел! Ты вообще после выполнения Commit делал?
Megabyte (2006-10-11 14:32:00) [11]Ну я хз. Просто отдельно куски работают, вместе: либо ругается, либо не происходит никаких действий.
Я понял, что косяк где-то у меня, но мне проще и быстрее не искать баг, а разделить хп. :)
Desdechado (2006-10-11 12:20:00) [12]Есть у меня такие процедуры, работают нормально.
В чем сложность-то?
Megabyte (2006-10-11 12:17:00) [13]Ладно, я уже разделил их. В процедуре действия выполняется заполнение и модификация таблицы, а в запросе берутся оттуда данные...
Desdechado (2006-10-11 11:44:00) [14]> одновременно процедурой действия и выбора
не понял
> select * from my_sp(:param)
> и через методы IBQuery close, open, тогда не выполняются действия.
какие действия не выполняются?
Видимо, условия не подходят.