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

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

Хранимые Процедуры разных типов [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, тогда не выполняются действия.
какие действия не выполняются?
Видимо, условия не подходят.


Наверх

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